0 votes

Request.ServerVariables("SCRIPT_NAME") ne renvoie rien du tout

Branchement sur ce lien il semble que Request.ServerVariables("SCRIPT_NAME") ne renvoie rien. J'ai mis en place une simple boucle pour voir si quelque chose sort, mais sans succès. Avez-vous une idée ?

For Each s As String In Request.ServerVariables
   Label1.Text += s
Next

ServerVariables ramène une liste de chaînes de caractères sous forme de clé->valeur, comme défini dans la section System.Collections.Specialized.NameValueCollection

EDIT : Il semble qu'il y ait un problème pour obtenir les ServerVariables d'une page à l'aide des pages maîtres. Dans mon code derrière le modèle, je définis ce qui suit :

Public Partial Class Test
    Inherits System.Web.UI.Page

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Response.Write(Context.Request.ServerVariables("SCRIPT_NAME"))
  End Sub
End Class

Cela ne fonctionne pas, tout simplement. Si j'entre le code dans le champ Page_Load dans la page .aspx, en procédant comme suit :

<% Response.Write(Context.Request.ServerVariables("SCRIPT_NAME")) %>

Ensuite, cela fonctionne bien. Avez-vous une idée de la raison pour laquelle cela se produit ?

4voto

Zhaph - Ben Duguid Points 18573

Tu es sûr que tu ne vas pas récupérer ça ?

L'utilisation de Response.Write à partir de l'arrière-code (soit dans la page, soit dans la page maître) fera apparaître la chaîne de caractères en haut de la page (généralement), avant le reste du HTML, etc.

J'ai placé un contrôle littéral sur une page maître, avant l'espace réservé au contenu :

On Master: <asp:Literal id="LiteralMaster" runat="server"></asp:Literal>

Et ensuite, en définissant la propriété Text dans l'événement Page_Load de la page principale :

LiteralMaster.Text = Context.Request.ServerVariables("SCRIPT_NAME")

J'ai également ajouté un contrôle littéral dans l'espace réservé au contenu d'une page qui utilise cette page maître :

On page: <asp:Literal id="LiteralPage" runat="server"></asp:Literal>

Et dans l'événement Page_Load de la page, j'avais ce qui suit :

LiteralPage.Text = Context.Request.ServerVariables("SCRIPT_NAME")

Ce qui a donné lieu à :

Sur le maître : /LittleTest/UsingMaster.aspx
Sur la page : /LittleTest/UsingMaster.aspx

Modifier l'événement Page_Load de ma page pour devenir :

LiteralPage.Text = Context.Request.ServerVariables("SCRIPT_NAME")
Response.Write("From response.write: " &
  Context.Request.ServerVariables("Script_Name"))

Le résultat est l'affichage suivant dans mon navigateur :

De response.write : /LittleTest/UsingMaster.aspx
Sur le maître : /LittleTest/UsingMaster.aspx
Sur la page : /LittleTest/UsingMaster.aspx

Cependant, le html ressemblait plutôt à :

From response.write:/LittleTest/UsingMaster.aspx

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title></title>
  </head>
  <body>
    <form name="aspnetForm" 
      method="post" action="UsingMaster.aspx" id="aspnetForm">
      <div>
        On Master: /LittleTest/UsingMaster.aspx
        <br />
        On page: /LittleTest/UsingMaster.aspx
      </div>
    </form>
  </body>
</html>

Modifier pour répondre au commentaire

Vous attribuez la représentation de la chaîne d'un élément NameValueCollection au contenu de votre étiquette. Il s'agit uniquement du NOM, et non de la combinaison du NOM et de la VALEUR.

Essayez ce qui suit :

For Each s As String In Request.ServerVariables
  Label1.Text += s & ": " & Request.ServerVariables(s)
Next

Pour plus d'informations, consultez les documents MSDN :

HttpRequest.ServerVariables

0voto

John Saunders Points 118808

La définition à http://msdn.microsoft.com/en-us/library/ms524602.aspx dit "Un chemin virtuel vers le script en cours d'exécution, par exemple, "/vdir/default.asp". Ceci est utilisé pour les URL auto-référencées.". Je pense que la partie ".asp" peut être un indice sur la raison pour laquelle cela ne fonctionne pas pour ASP.NET.

Je recommande de ne jamais utiliser Request.ServerVariables. Tout ce qui est créé pour être utilisé en ASP classique ou en ISAPI devrait vous rendre nerveux.

0voto

GateKiller Points 19113

Si vous essayez de retourner le nom du script, essayez :

Request.CurrentExecutionFilePath

et si vous vouliez juste le nom du script sans le chemin, vous pourriez utiliser :

Path.GetFileName(Request.CurrentExecutionFilePath)

Path.GetFileName() requiert l'espace de noms System.IO

0voto

Canavar Points 29161

J'ai essayé votre code, et j'ai obtenu le résultat souhaité :

<% Response.Write(Context.Request.ServerVariables("SCRIPT_NAME")) %>

Retours : /TESTERS/Default.aspx

Vous pouvez le remplacer par ceci, le résultat est le même :

string path = HttpContext.Current.Request.Url.AbsolutePath;

Retours : /TESTERS/Default.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X