Поделиться через


Нотация Tilde сопоставляется с исходными URL-адресами с помощью перезаписи URL-адреса IIS в веб-страницы ASP.NET Razor версии 3

В этой статье показано, как устранить проблему, из-за которой нотация тильды (~) внедренных в элементы протокола HTTP в веб-страницах Razor версии 3 сопоставляется с исходными URL-адресами с помощью перезаписи URL-адреса службы IIS (IIS).

Исходная версия продукта: ASP.NET
Исходный номер базы знаний: 2905164

Симптомы

В Microsoft веб-страницы ASP.NET Razor версии 3 тильда (~) встраивается в HTML-элементы, например <A/>, <SCRIPT/>или <LINK/> сопоставляется с исходными URL-адресами с помощью перезаписи URL-адреса IIS. Например, когда запросы в разделе asp.net/content asp.netперезаписываются на URL-адрес, href атрибут в <A href='~/content/'/> ней разрешается /content/content/ /. Таким образом, страницы в Razor версии 2 веб-страниц могут работать неправильно после обновления до веб-страниц Razor версии 3 или ASP.NET model-View-Controller (MVC) 5.

Причина

Эта проблема возникает из-за изменения поведения нотации тильд в URL-адресах в Веб-страницах Razor версии 3 для согласованности с ASP.NET MVC. В ASP.NET MVC нотация тильды в Url.Content методе или Html.ActionLink метод создает исходные URL-адреса независимо от правил перезаписи URL-адресов IIS.

Однако в Веб-страницах Razor версии 2 нотация тильды в URL-адресах сопоставляется с URL-адресами перезаписи IIS при включении модуля переопределения URL-адресов IIS. Например, когда запросы в разделе content.asp.net asp.net/content/перезаписываются на URL-адрес, href атрибут включено <A href='~/book/'/> /content/book/ в . В Веб-страницах Razor версии 3 тот же href атрибут преобразуется в /book/, который является исходным URL-адресом в браузере.

Решение

Чтобы разрешить нотацию тильды на перезаписанные URL-адреса с помощью того же поведения, что и в Веб-страницах Razor версии 2, задайте IIS_WasUrlRewritten контекст false на каждой веб-странице или в Application_BeginRequest Global.asax для глобального параметра следующим образом:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    Context.Items["IIS_WasUrlRewritten"] = false;
}

Примечание.

Изменение контекста IIS_WasUrlRewritten влияет на нотацию тильды не только в элементах HTML, но и в методах MVC helper . Например, если задано значение false, то нотация тильд в Url.Content и Html.ActionLink возвращает url-адреса перезаписи.

Дополнительная информация

Дополнительные сведения о синтаксисе Razor и некоторых связанных методах MVC см. на следующих веб-сайтах: