2010-01-07 3 views

Antwort

44

Von MSDN:

Die rohe URL wird als Teil der die URL definiert nach der Domäne Informationen. In der URL-Zeichenfolge http://www.contoso.com/articles/recent.aspx, lautet die unformatierte URL /articles/recent.aspx.

Das bedeutet, Sie rawurl verwenden können und müssen nicht über, durch die Pflege-Adresse der Server aufgerufen wurde (zum Beispiel http://yourserver/ oder http://yourserver.yourdomain.com/, wenn Sie über mehrere Schnittstellen verfügen.)

jedoch die URL Eigentum Ein Objekt HTTPRequest gibt ein Objekt System.URI zurück, das auch den Servernamen enthält.

+11

Diese Erklärung bedeutet falsch, dass 'Request.RawUrl' nur syntaktischer Zucker für' Request.Url.LocalPath' ist. – Brian

+3

@Brian könnte es hilfreich sein zu erklären, wie es nicht nur syntaktischer Zucker ist. –

+7

@MalRoss: Sie können verschiedene Pfade vollständig während des Umschreibens von Pfad sein (z. B. 404-Handler). Siehe [Antwort des britischen Entwicklers] (http://stackoverflow.com/a/20381367/18192) – Brian

16

Request.RawUrl ist sehr ähnlich zu Request.Url.PathAndQueryaußer, dass Request.Url.PathAndQuery enthält die Default Document wenn man verwendet wurde, während Request.RawUrl nicht. Aus meiner Erfahrung gilt dies für ASP.Net 4.0 and higher.

44

Niemand scheint erwähnt zu haben, dass es die Raw-URL zeigt, die tatsächlich von IIS empfangen wurde, bevor irgendeine Manipulation stattgefunden hat, die es um IIS oder Ihr Dateisystem mit URL-Umschreiben zum Beispiel sendet.

Angenommen, Sie haben in einer MVC-App eine Fehlerseite unter/error gesetzt und Sie haben Ihr Webconfig so eingestellt, dass Fehlerseiten durch Ihre benutzerdefinierte Fehlerseite ersetzt werden. Auf diese Weise erhält der Benutzer beim Auftreten eines Fehlers unter/Fehler die Seite unter/error, aber die URL in der Adresszeile Ihres Browsers wird weiterhin www.mysite.com lauten.com/faultypage - das ist eine Übertragung oder ein Neuschreiben.

Jetzt auf Ihrem Fehler-Controller, wenn Sie einen Blick auf Request.Url werfen wollen, wird es etwas wie "www.mysite.com/error" und Request.RawUrl würde sagen (sinnvoller?) "/ Faultypage" was ist die tatsächliche Anfrage des Benutzers und nicht die Seite, die gerade ausgeführt wird.

+1

Gibt es eine Möglichkeit, die URL nach der Manipulation zu bekommen? –

+2

Ja. 'Request.Url' – BritishDeveloper

26

Hier ist eine einfache Referenz, wie Sie verschiedene Teile einer URL in C# erhalten.

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 
+0

Welche Verwendung für' HttpServerUtility.UrlTokenDecode'? – Kiquenet

+0

super coole Antwort! – Vikrant

+0

Der hier fehlt, um diese Antwort zu vervollständigen, ist "HttpContext.Current.Request.Path" – bojingo

-2

I w BritishDeveloper Zustimmen, ist es wichtig Unterschied: die Zeichenfolge (ohne Domäne) In der anderen Hand anfordern Request.RawURL den ursprünglichen Wert des requet hat (bevor die IIS umleiten die URL) und zurück .Uri return

Verwandte Themen