Tilde notation maps to the original URLs by using IIS URL rewrite in ASP.NET Web Pages Razor V3
Dieser Artikel hilft Ihnen, das Problem zu beheben, bei dem die in HTTP-Elemente (Hypertext Transfer Protocol) eingebettete Tilde-Schreibweise (~) in Webseiten Razor V3 den ursprünglichen URLs mithilfe der INTERNETINFORMATIONSDIENSTE -URL-Neuschreibung zugeordnet wird.
Ursprüngliche Produktversion: ASP.NET
Ursprüngliche KB-Nummer: 2905164
Problembeschreibung
In Microsoft ASP.NET Web Pages Razor V3, the tilde (~) notation embedded in the HTML elements such , <A/> or map to the original <SCRIPT/> <LINK/> URLs by using the IIS URL rewrite. Wenn z. B. die anforderungen unter in die URL unter asp.net/content umgeschrieben asp.net werden, wird das Attribut in aufgelöst und href <A href='~/content/'/> nicht in /content/content/ / . Daher funktionieren die Seiten in Web Pages Razor V2 möglicherweise nicht ordnungsgemäß, nachdem Sie auf Web Pages Razor V3 oder ASP.NET Model-View-Controller (MVC) 5 aktualisiert haben.
Ursache
This issue occurs because the behavior of tilde notation in URLs is changed in Web Pages Razor V3 for consistency with ASP.NET MVC. In ASP.NET MVC erzeugt die Tilde-Notation in der Url.Content Methode oder der Methode die ursprünglichen Html.ActionLink URLs unabhängig von den REGELN für die Neuschreibung der IIS-URL.
In Web Pages Razor V2 wird die Tilde-Notation in URLs jedoch den umgeschriebenen URLs zugeordnet, wenn das IIS-URL-Umschreibungsmodul aktiviert ist. Wenn die anforderungen unter beispielsweise in die URL unter content.asp.net umgeschrieben asp.net/content/ werden, wird das href Attribut in aufgelöst in <A href='~/book/'/> /content/book/ . Auf Webseiten Razor V3 wird dasselbe href Attribut in die ursprüngliche URL im Browser /book/ übersetzt.
Lösung
Um die Tilde-Notation in die umgeschriebenen URLs aufzulösen, indem Sie dasselbe Verhalten wie in Webseiten Razor V2 verwenden, legen Sie den IIS_WasUrlRewritten Kontext in jeder Webseite oder in "Global.asax" für die globale Einstellung wie folgt auf "false" Application_BeginRequest fest:
protected void Application_BeginRequest(object sender, EventArgs e)
{
Context.Items["IIS_WasUrlRewritten"] = false;
}
Hinweis
Die Änderung des IIS_WasUrlRewritten Kontexts wirkt sich nicht nur in den HTML-Elementen, sondern auch in den Methoden auf die Tilde-Notation MVC helper aus. Wenn sie beispielsweise auf "false" festgelegt ist, wird die Tilde-Notation in Url.Content die umgeschriebenen URLs ein- und Html.ActionLink zurückgegeben.
Weitere Informationen
For more information about the Razor syntax and about some related MVC methods, go to the following websites: