Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как устранить проблему, из-за которой нотация тильды (~) внедренных в элементы протокола 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 см. на следующих веб-сайтах: