Request.RawUrl vs. Request.Url

asp.net

asp.net Problem Overview


What is the difference between Request.RawUrl and Request.Url in ASP.NET?

asp.net Solutions


Solution 1 - asp.net

No one seems to have mentioned that it shows the Raw URL actually received by IIS, before any manipulation may have happened sending it around IIS or your file system with URL rewriting for example.

Say you have set an error page at /error in an MVC app and you set your webconfig to replace error pages with your custom error page at that location. In this way when getting an error at /faultypage, the user will get the page at /error but the url in your browser's address bar will still say www.mysite.com/faultypage—this is a transfer, or a rewrite.

Now on your error controller if you are to take a peek at Request.Url, it will be something like www.mysite.com/error and Request.RawUrl would say (more usefully?) /faultypage which is the user's actual request not the page that is currently being executed.

Solution 2 - asp.net

From MSDN:

> The raw URL is defined as the part of > the URL following the domain > information. In the URL string > http://www.contoso.com/articles/recent.aspx, > the raw URL is > /articles/recent.aspx.

This means, you can use rawurl and do not have to care about through which address the server was called (for instance http://yourserver/ or http://yourserver.yourdomain.com/ if you have multiple interfaces.)

However, the URL property of an HTTPRequest object returns a System.URI object, which also contains server name.

Solution 3 - asp.net

Request.RawUrl is very similar to Request.Url.PathAndQuery except that Request.Url.PathAndQuery includes the Default Document if one was used whereas Request.RawUrl does not. From my experience, this is true for ASP.Net 4.0 and higher.

Solution 4 - asp.net

The HttpRequest.RawUrl Property documentation describes the property value as:

> The raw URL is defined as the part of the URL following the domain information. In the URL string http://www.contoso.com/articles/recent.aspx, the raw URL is /articles/recent.aspx. The raw URL includes the query string, if present.

The HttpRequest.Url Property documentation describes the property value as:

> A Uri object that contains the URL of the current request.

See the Uri class documentation for its properties.

Solution 5 - asp.net

Request.RawUrl returns a string, it's everything after the domain information for the current url.

Eg, for: https://stackoverflow.com/questions/2019735/request-rawurl-vs-request-url

Request.RawUrl would be /questions/2019735/request-rawurl-vs-request-url

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionkerbouView Question on Stackoverflow
Solution 1 - asp.netBritishDeveloperView Answer on Stackoverflow
Solution 2 - asp.netnaivistsView Answer on Stackoverflow
Solution 3 - asp.netdanaView Answer on Stackoverflow
Solution 4 - asp.netrahulView Answer on Stackoverflow
Solution 5 - asp.netTownView Answer on Stackoverflow