Request.RawUrl vs. Request.Url

Quelle est la différence entre Request.RawUrl et Request.Url dans ASP.NET?

De MSDN:

L’URL brute est définie comme la partie de l’URL qui suit les informations du domaine. Dans la chaîne d’URL http://www.contoso.com/articles/recent.aspx , l’URL brute est /articles/recent.aspx .

Cela signifie que vous pouvez utiliser rawurl et ne pas vous soucier de l’adresse utilisée par le serveur (par exemple, http://yourserver/ ou http://yourserver.yourdomain.com/ si vous avez plusieurs interfaces).

Toutefois, la propriété URL d’un object HTTPRequest renvoie un object System.URI , qui contient également le nom du serveur.

Personne ne semble avoir mentionné qu’il affiche l’URL brute réellement reçue par IIS avant que toute manipulation ait pu se produire en l’envoyant autour d’IIS ou de votre système de fichiers avec une réécriture d’URL par exemple.

Supposons que vous avez défini une page d’erreur sur / error dans une application MVC et que votre webconfig remplace les pages d’erreur par votre page d’erreur personnalisée à cet emplacement. De cette façon, lorsque vous obtenez une erreur sur / faultypage, l’utilisateur obtiendra la page à / error mais l’URL dans la barre d’adresse de votre navigateur indiquera toujours http://www.monsite.com/faultypage – il s’agit d’un transfert ou d’une réécriture.

Maintenant, sur votre contrôleur d’erreur, si vous voulez jeter un coup d’œil à Request.Url, ce sera quelque chose comme “www.monsite.com/error” et Request.RawUrl dirait (plus utilement?) “/ Faultypage”, qui est le nom réel de l’utilisateur. demande pas la page en cours d’exécution.

Voici une référence facile pour savoir comment obtenir différentes parties d’une URL en C #.

 URL used for this example: http://localhost:12345/site/page.aspx?q1=1&q2=2 Value of HttpContext.Current.Request.Url.Host localhost Value of HttpContext.Current.Request.Url.Authority localhost:12345 Value of HttpContext.Current.Request.Url.AbsolutePath /site/page.aspx Value of HttpContext.Current.Request.ApplicationPath /site Value of HttpContext.Current.Request.Url.AbsoluteUri http://localhost:12345/site/page.aspx?q1=1&q2=2 Value of HttpContext.Current.Request.RawUrl /site/page.aspx?q1=1&q2=2 Value of HttpContext.Current.Request.Url.PathAndQuery /site/page.aspx?q1=1&q2=2 

Request.RawUrl est très similaire à Request.Url.PathAndQuery sauf que Request.Url.PathAndQuery inclut le document par défaut si celui-ci a été utilisé, contrairement à Request.RawUrl . D’après mon expérience, cela est vrai pour ASP.Net 4.0 et supérieur .

Request.RawUrl renvoie une chaîne, tout ce qui se trouve après les informations de domaine pour l’URL en cours.

Par exemple, pour: Request.RawUrl vs. Request.Url

Request.RawUrl serait / questions / 2019735 / request-rawurl-vs-request-url

Request.Url renvoie un object Uri, http://msdn.microsoft.com/en-us/library/system.uri_members.aspx

Lire la propriété HttpRequest.RawUrl

L’URL brute est définie comme la partie de l’URL qui suit les informations du domaine. Dans la chaîne d’URL http://www.contoso.com/articles/recent.aspx , l’URL brute est /articles/recent.aspx. L’URL brute inclut la chaîne de requête, si présente.

Propriété HttpRequest.Url

Un object Uri contenant des informations concernant l’URL de la requête en cours.

Je suis d’accord avec BritishDeveloper, c’est une différence importante: Request.RawURL a la valeur d’origine de la requet (avant que l’IIS ne redirige l’url) et retourne la chaîne (sans domaine) d’autre part Request.Uri return