179 votes

Comment obtenir l'URL complète de la page sur laquelle je me trouve en C# ?

Je dois être en mesure d'obtenir l'URL complète de la page sur laquelle je me trouve à partir d'un contrôle utilisateur. S'agit-il simplement de concaténer un ensemble de variables Request ? Si oui, lesquelles ? Ou existe-t-il une méthode plus simple ?

6 votes

Pour quiconque se trouve dans une ferme web à charge équilibrée, il faut se méfier du numéro de port qui apparaît lorsqu'on utilise System.Url : stackoverflow.com/questions/7674850/

357voto

Mohsen Points 321

Voici une liste à laquelle je me réfère habituellement pour ce type d'information :

Request.ApplicationPath :   /virtual_dir
Request.CurrentExecutionFilePath :  /virtual_dir/webapp/page.aspx
Request.FilePath :  /virtual_dir/webapp/page.aspx
Request.Path :  /virtual_dir/webapp/page.aspx
Request.PhysicalApplicationPath :   d:\Inetpub\wwwroot\virtual_dir\
Request.QueryString :   /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.AbsolutePath :  /virtual_dir/webapp/page.aspx
Request.Url.AbsoluteUri :   http://localhost:2000/virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Host :  localhost
Request.Url.Authority : localhost:80
Request.Url.LocalPath : /virtual_dir/webapp/page.aspx
Request.Url.PathAndQuery :  /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Port :  80
Request.Url.Query : ?q=qvalue
Request.Url.Scheme :    http
Request.Url.Segments :  /
    virtual_dir/
    webapp/
    page.aspx

J'espère que cela vous sera utile !

1 votes

1) Il existe également Request.RawUrl ; 2) Request.Url peut lever une exception en cas de "très mauvais chemins demandés".

1 votes

Réponse très utile, mais les numéros de port ne devraient-ils pas être cohérents pour éviter toute confusion (en supposant que tous les exemples correspondent à la même demande, par exemple Authority et Port impliquent le port 80, mais AbsoluteUri contient le port 2000) ?

1 votes

Request.QueryString renvoie à q=qvalue seulement

161voto

travis Points 14676

J'utilise habituellement Request.Url.ToString() pour obtenir l'url complète (y compris la chaîne de requête), sans concaténation.

2 votes

Si l'URL contient '#', tous les caractères après # ne seront pas inclus.

6 votes

@KrunalSisodiya Je ne pense pas que le hachage d'une URL soit jamais envoyé au serveur, mais je peux me tromper.

2 votes

Request.Url.ToString() ne comprend pas de queryString.

77voto

DevelopingChris Points 12510
Request.Url.AbsoluteUri

Cette propriété fait tout ce dont vous avez besoin, en un seul appel succinct.

6 votes

+1. C'est la meilleure réponse. Elle devrait être préférée à Request.Url.ToString().

9voto

Christian Hagelid Points 4795

Si vous avez besoin de l'URL complète, depuis le http jusqu'à la chaîne de requête, vous devrez concaténer les variables suivantes

Request.ServerVariables("HTTPS") // to check if it's HTTP or HTTPS
Request.ServerVariables("SERVER_NAME") 
Request.ServerVariables("SCRIPT_NAME") 
Request.ServerVariables("QUERY_STRING")

2 votes

Cela ne tient pas compte des ports non standard (par exemple, ne pas utiliser le port 80 pour http).

1 votes

Vous pourriez utiliser Request.ServerVariables("SERVER_PORT") pour la détection du port !

1 votes

Notez que cette réponse utilise la syntaxe VB.Net. En C#, utilisez par exemple Request.ServerVariables["HTTPS"].

8voto

FlySwat Points 61945

Demande.RawUrl

7 votes

Cela ne renvoie pas l'url complète. Si l'url complète est blah.com/1.1/home/main?a=1 Request.RawUrl retournera 1.1/hom/main?a=1

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