2010-01-07 2 views

ответ

44

Из MSDN:

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

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

Однако URL свойство объект HTTPRequest возвращает объект System.URI, который также содержит имя сервера.

+11

Это объяснение неверно означает, что 'Request.RawUrl' является просто синтаксическим сахаром для' Request.Url.LocalPath'. – Brian

+3

@Brian может быть полезно объяснить, как это не просто синтаксический сахар. –

+7

@MalRoss: они могут быть разными путями полностью во время перезаписи пути (например, 404 обработчиков). См. [Ответ британского разработчика] (http://stackoverflow.com/a/20381367/18192) – Brian

4

Read HttpRequest.RawUrl Property

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

HttpRequest.Url Property

Объект Uri, содержащий информацию относительно URL текущего запроса.

16

Request.RawUrl очень похож на Request.Url.PathAndQueryза исключением, что Request.Url.PathAndQuery содержит Default Document, если использовался, тогда как Request.RawUrl - нет. По моему опыту, это верно для ASP.Net 4.0 and higher.

44

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

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

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

+1

Есть ли способ получить URL-адрес после манипуляций? –

+2

Да. 'Request.Url' – BritishDeveloper

26

Вот простая ссылка, как получить разные части 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 
+0

Какое использование для' HttpServerUtility.UrlTokenDecode'? – Kiquenet

+0

супер прохладный ответ! – Vikrant

+0

Тот, который отсутствует здесь, чтобы завершить этот ответ, является 'HttpContext.Current.Request.Path' – bojingo

-2

Я согласен ж BritishDeveloper, это важное различие: Request.RawURL имеет исходное значение requet (до того, как IIS перенаправление URL) и возвращает строку (без домена) В другой стороны, запрос .Uri return

Смежные вопросы