76 votes

Request.RawUrl vs. Request.Url

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

65voto

BritishDeveloper Points 4280

Personne ne semble avoir mentionné qu'il montre l'URL brute effectivement reçue par IIS, avant toute manipulation qui aurait pu se produire en la faisant circuler dans IIS ou dans votre système de fichiers avec une réécriture d'URL par exemple.

Disons que vous avez défini une page d'erreur à /error dans une application MVC et vous définissez votre webconfig pour remplacer les pages d'erreur par votre page d'erreur personnalisée à cet emplacement. De cette façon, lorsque vous obtenez une erreur à /faultypage l'utilisateur obtiendra la page suivante /error mais l'url dans la barre d'adresse de votre navigateur dira toujours www.mysite.com/faultypage -c'est un transfert, ou une réécriture.

Maintenant, sur votre contrôleur d'erreur, si vous voulez jeter un coup d'oeil à Request.Url il sera quelque chose comme www.mysite.com/error y Request.RawUrl dirait (plus utilement ?) /faultypage qui est la demande réelle de l'utilisateur et non la page en cours d'exécution.

54voto

naivists Points 15639

De MSDN :

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

Cela signifie que vous pouvez utiliser rawurl et ne doivent pas se préoccuper de savoir par quelle adresse le serveur a été appelé (par exemple http://yourserver/ o http://yourserver.yourdomain.com/ si vous avez plusieurs interfaces).

Toutefois, le URL d'un HTTPRequest renvoie un System.URI qui contient également le nom du serveur.

16 votes

Cette explication implique à tort que Request.RawUrl est juste un sucre syntaxique pour Request.Url.LocalPath .

3 votes

@Brian il pourrait être utile d'expliquer comment ce n'est pas seulement du sucre syntaxique.

10 votes

@MalRoss : Il peut s'agir de chemins entièrement différents pendant la réécriture du chemin (par exemple, les gestionnaires 404). Voir Réponse de British Developer

16voto

dana Points 4890

Request.RawUrl est très similaire à Request.Url.PathAndQuery sauf que Request.Url.PathAndQuery comprend le Document par défaut s'il a été utilisé alors que Request.RawUrl ne le fait pas. D'après mon expérience, cela est vrai pour ASP.Net 4.0 et supérieur .

6voto

rahul Points 84185

El Documentation sur la propriété HttpRequest.RawUrl décrit la valeur de la propriété comme :

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

El Documentation sur la propriété HttpRequest.Url décrit la valeur de la propriété comme :

A Uri qui contient l'URL de la demande en cours.

Voir le Documentation sur la classe Uri pour ses propriétés.

5voto

Town Points 9331

Request.RawUrl renvoie une chaîne, c'est tout ce qui se trouve après les informations du domaine pour l'url actuelle.

Eg, pour : Request.RawUrl vs. Request.Url

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

Request.Url renvoie un objet Uri, http://msdn.microsoft.com/en-us/library/system.uri_members.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