Запрос.RawUrl против запроса.Url-адрес


в чем разница между Request.RawUrl и Request.Url in ASP.NET?

7 59

7 ответов:

от MSDN:

необработанный URL определяется как часть URL-адрес, следующий за доменом информация. В строке URL http://www.contoso.com/articles/recent.aspx, необработанный URL-адрес /articles/recent.aspx.

это означает, что вы можете использовать rawurl и не нужно заботиться о том, через какой адрес был вызван сервер (например http://yourserver/ или http://yourserver.yourdomain.com/ если у вас есть несколько интерфейсов.)

на URL свойства HTTPRequest объект возвращает a

кажется, никто не упомянул, что он показывает необработанный URL, фактически полученный IIS, прежде чем какие-либо манипуляции могли произойти, отправив его вокруг IIS или вашей файловой системы с перезаписью URL, например.

скажем, вы установили страницу ошибки в /error в приложении MVC, и вы установили свой webconfig для замены страниц ошибок на пользовательскую страницу ошибок в этом месте. Таким образом, когда получаю сообщение об ошибке в /faultypage пользователь получит страницу на ошибки, но URL-адрес в строку Вашего браузера адресная строка все равно скажет www.mysite.com/faultypage - это перевод или переписывание.

теперь на вашем контроллере ошибок, если вы должны взглянуть на запрос.Url это будет что-то вроде "www.mysite.com/error - и просьба.RawUrl бы сказать (с большей пользой?) "/faultypage", который является фактическим запросом пользователя, а не страницей, которая в настоящее время выполняется.

вот простая ссылка на то, как получить различные части URL-адреса в 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 очень похоже на Request.Url.PathAndQueryкроме это Request.Url.PathAndQuery включает в себя Документ По Умолчанию если один был использован в то время как Request.RawUrl нет. По моему опыту, это верно для ASP.Net 4.0 и выше.

запрос.RawUrl возвращает строку, это все после информации о домене для текущего url.

например, для: запрос.RawUrl против запроса.URL-адрес

запрос.RawUrl будет / questions / 2019735 / request-rawurl-vs-request-url

запрос.Url возвращает объект Uri,http://msdn.microsoft.com/en-us/library/system.uri_members.aspx

The HttpRequest.Документация RawUrl собственность описывает значение свойства как:

исходный URL-адрес определяется как часть URL после домена. В строке URL http://www.contoso.com/articles/recent.aspx, необработанный URL-адрес /articles/recent.aspx. Необработанный URL-адрес включает строку запроса, если она присутствует.

The HttpRequest.Url Property documentation описывает значение свойства как:

A Uri объект, который содержит URL-адрес текущего запроса.

посмотреть документация класса Uri свойства.

Я согласен с британским разработчиком, это важная разница : Запрос.RawURL имеет исходное значение requet (перед перенаправлением IIS url) и верните строку (без домена) В другой руке просьба.Uri return