Request.RawUrl与Request.Url

ASP.NET中的Request.RawUrlRequest.Url什么区别?

来自MSDN:

原始url被定义为域信息后面的URL部分。 在URLstringhttp://www.contoso.com/articles/recent.aspx ,原始URL是/articles/recent.aspx

这意味着,您可以使用rawurl而不必关心服务器被调用的地址(例如http://yourserver/http://yourserver.yourdomain.com/如果您有多个接口的话)。

但是, HTTPRequest对象的URL属性返回一个System.URI对象,该对象还包含服务器名称。

似乎没有人提到它显示了在IIS发生任何操作之前IIS实际接收到的原始URL,例如,通过URL重写将其发送到IIS或您的文件系统。

假设你在一个MVC应用程序的错误页面上设置了一个错误页面,并设置了你的webconfig来用你自定义的错误页面replace错误页面。 通过这种方式,当在/ faultypage处得到一个错误时,用户将得到/ error页面,但浏览器的地址栏中的url仍然会说www.mysite.com/faultypage – 这是一个传输或重写。

现在在你的错误控制器,如果你要偷看Request.Url,它会像“www.mysite.com/error”和Request.RawUrl会说(更有用?)“/ faultypage”这是用户的实际请求不是当前正在执行的页面。

这里有一个关于如何在C#中获取URL的不同部分的简单参考。

 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.RawUrlRequest.RawUrl非常相似, 只不过 Request.Url.PathAndQuery包含默认文档(如果使用了默认文档) ,而Request.RawUrl则不包含。 从我的经验来看, ASP.Net 4.0及更高版本都是如此。

Request.RawUrl返回一个string,它是当前url的域信息之后的所有内容。

例如,对于: Request.RawUrl与Request.Url

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

Request.Url返回一个Uri对象, http://msdn.microsoft.com/en-us/library/system.uri_members.aspx

阅读HttpRequest.RawUrl属性

原始url被定义为域信息后面的URL部分。 在URLstringhttp://www.contoso.com/articles/recent.aspx中 ,原始URL是/articles/recent.aspx。 原始URL包含查询string(如果存在)。

HttpRequest.Url属性

包含有关当前请求的URL的信息的Uri对象。

我同意英国开发者,这是重要的区别:Request.RawURL具有请求的原始值(在IISredirecturl之前)并返回string(无域)另一方面Request.Uri返回