Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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: