Freigeben über


Tilde-Notation wird den ursprünglichen URLs mithilfe von IIS-URL-Umschreibung in ASP.NET Webseiten Razor V3 zugeordnet

Dieser Artikel hilft Ihnen, das Problem zu beheben, bei dem tilde (~) Notation eingebettet in Hypertext Transfer Protocol (HTTP)-Elemente in Webseiten Razor V3 den ursprünglichen URLs zugeordnet ist, indem sie die URL-Umschreibung Internetinformationsdienste (IIS) verwenden.

Ursprüngliche Produktversion: ASP.NET
Ursprüngliche KB-Nummer: 2905164

Problembeschreibung

In Microsoft ASP.NET Webseiten Razor V3 wird die Tilde-Notation (~) in die HTML-Elemente wie , z <A/>. B. , <SCRIPT/>oder <LINK/> die ursprünglichen URLs mithilfe der IIS-URL neu geschrieben. Wenn z. B. die anforderungen unter asp.net/content der URL asp.netumgeschrieben werden, wird das href Attribut <A href='~/content/'/> in anstelle von "In" /aufgelöst/content/content/. Daher funktionieren die Seiten auf Webseiten Razor V2 nach dem Upgrade auf Webseiten Razor V3 oder ASP.NET Model-View-Controller (MVC) 5 möglicherweise nicht ordnungsgemäß.

Ursache

Dieses Problem tritt auf, da das Verhalten der Tildenotation in URLs in Webseiten Razor V3 zur Konsistenz mit ASP.NET MVC geändert wird. In ASP.NET MVC erzeugt die Tildenotation in der Url.Content Methode oder die Html.ActionLink Methode die ursprünglichen URLs, unabhängig von den REGELN zum Umschreiben der IIS-URL.

In Webseiten Razor V2 ist die Tildenotation in URLs jedoch den neu geschriebenen URLs zugeordnet, wenn das IIS-URL-Umschreibenmodul aktiviert ist. Wenn z. B. die anforderungen unter content.asp.net der URL asp.net/content/umgeschrieben werden, wird das href Attribut <A href='~/book/'/> in aufgelöst in /content/book/ . In Webseiten Razor V3 wird dasselbe href Attribut übersetzt, in das die ursprüngliche URL im Browser übersetzt /book/wird.

Lösung

Um die Tildenotation mit den neu geschriebenen URLs zu beheben, indem Sie dasselbe Verhalten wie in Webseiten Razor V2 verwenden, legen Sie den IIS_WasUrlRewritten Kontext auf "false " in jeder Webseite oder in Application_BeginRequest " Global.asax " für die globale Einstellung wie folgt fest:

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

Notiz

Die Änderung des IIS_WasUrlRewritten Kontexts wirkt sich nicht nur auf die Tildenotation in den HTML-Elementen, sondern auch auf die MVC helper Methoden aus. Wenn sie beispielsweise auf "false" festgelegt ist, gibt die Tildenotation in Url.Content und Html.ActionLink gibt die umgeschriebenen URLs zurück.

Weitere Informationen

Weitere Informationen zur Razor-Syntax und zu einigen verwandten MVC-Methoden, gehen Sie zu den folgenden Websites: