Notacja tyldy mapuje na oryginalne adresy URL przy użyciu ponownego zapisywania adresów URL usług IIS w ASP.NET Web Pages Razor V3

Ten artykuł pomaga rozwiązać problem polegający na tym, że notacja tyldy (~) osadzona w elementach protokołu HTTP (Hypertext Transfer Protocol) na stronach internetowych Razor v3 mapuje oryginalne adresy URL przy użyciu ponownego zapisywania adresu URL usług Internet Information Services (IIS).

Oryginalna wersja produktu: ASP.NET
Oryginalny numer KB: 2905164

Symptomy

W programie Microsoft ASP.NET Web Pages Razor V3 notacja tyldy (~) osadzona w elementach HTML, takich jak <A/>, <SCRIPT/>lub <LINK/> mapuje na oryginalne adresy URL przy użyciu ponownego zapisywania adresu URL usług IIS. Na przykład gdy żądania w obszarze asp.net/content zostaną przepisane do adresu URL w obszarze asp.net, href atrybut w <A href='~/content/'/> pliku jest rozpoznawany jako /content/content/ zamiast na /. W związku z tym strony na stronach sieci Web Razor V2 mogą nie działać poprawnie po uaktualnieniu do stron internetowych Razor V3 lub ASP.NET Model-View-Controller (MVC) 5.

Przyczyna

Ten problem występuje, ponieważ zachowanie notacji tyldy w adresach URL zostało zmienione w usłudze Web Pages Razor W wersji 3 w celu zapewnienia spójności z ASP.NET MVC. W ASP.NET MVC notacja tyldy w metodzie Url.Content lub Html.ActionLink metodzie generuje oryginalne adresy URL niezależnie od reguł ponownego zapisywania adresów URL usług IIS.

Jednak w składniku Razor V2 stron sieci Web notacja tyldy w adresach URL jest mapowana na adresy URL przepisanych, gdy moduł ponownego zapisywania adresów URL usług IIS jest włączony. Na przykład gdy żądania w obszarze content.asp.net zostaną przepisane do adresu URL w obszarze asp.net/content/, href atrybut w <A href='~/book/'/> pliku jest rozpoznawany jako /content/book/ . Na stronach internetowych Razor V3 ten sam href atrybut jest tłumaczony na /book/, który jest oryginalnym adresem URL w przeglądarce.

Rozwiązanie

Aby rozwiązać notację tyldy do przepisanych adresów URL przy użyciu tego samego zachowania, co w przypadku stron internetowych Razor V2, ustaw IIS_WasUrlRewritten kontekst na wartość false na każdej stronie sieci Web lub w Application_BeginRequest pliku Global.asax dla ustawienia globalnego w następujący sposób:

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

Uwaga 16.

Zmiana IIS_WasUrlRewritten kontekstu ma wpływ na notację tyldy nie tylko w elementach HTML, ale także w metodach MVC helper . Jeśli na przykład ustawiono wartość false, notacja tyldy w Url.Content pliku i Html.ActionLink zwraca ponownie zapisane adresy URL.

Więcej informacji

Aby uzyskać więcej informacji na temat składni Razor i niektórych powiązanych metod MVC, przejdź do następujących witryn internetowych: