Condividi tramite


La notazione Tilde esegue il mapping agli URL originali usando la riscrittura dell'URL IIS in Pagine Web ASP.NET Razor V3

Questo articolo illustra come risolvere il problema in cui la notazione tilde (~) incorporata negli elementi HTTP (Hypertext Transfer Protocol) in Pagine Web Razor V3 esegue il mapping agli URL originali usando la riscrittura dell'URL di Internet Information Services (IIS).

Versione originale del prodotto: ASP.NET
Numero KB originale: 2905164

Sintomi

In Microsoft Pagine Web ASP.NET Razor V3, la notazione tilde (~) incorporata negli elementi HTML, ad <A/>esempio , <SCRIPT/>o esegue <LINK/> il mapping agli URL originali usando la riscrittura dell'URL IIS. Ad esempio, quando le richieste in asp.net/content vengono riscritte nell'URL in asp.net, l'attributo href in viene risolto /content/content/ in <A href='~/content/'/> anziché in /. Pertanto, le pagine in Pagine Web Razor V2 potrebbero non funzionare correttamente dopo l'aggiornamento a Pagine Web Razor V3 o ASP.NET Model-View-Controller (MVC) 5.

Causa

Questo problema si verifica perché il comportamento della notazione tilde negli URL viene modificato in Pagine Web Razor V3 per coerenza con ASP.NET MVC. In ASP.NET MVC, la notazione tilde nel Url.Content metodo o il Html.ActionLink metodo produce gli URL originali indipendentemente dalle regole di riscrittura dell'URL IIS.

Tuttavia, in Pagine Web Razor V2, la notazione tilde negli URL viene mappata agli URL riscritti quando il modulo di riscrittura url IIS è abilitato. Ad esempio, quando le richieste in content.asp.net vengono riscritte nell'URL in asp.net/content/, l'attributo href in viene risolto in <A href='~/book/'/> /content/book/ . In Pagine Web Razor V3 lo stesso href attributo viene convertito in /book/, ovvero l'URL originale nel browser.

Risoluzione

Per risolvere la notazione tilde negli URL riscritti usando lo stesso comportamento di Razor V2 delle pagine Web, impostare il IIS_WasUrlRewritten contesto su false in ogni pagina Web o in Application_BeginRequest Global.asax per l'impostazione globale come indicato di seguito:

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

Note

La modifica del IIS_WasUrlRewritten contesto influisce sulla notazione tilde non solo negli elementi HTML, ma anche nei MVC helper metodi . Ad esempio, se è impostato su false, la notazione tilde in Url.Content e Html.ActionLink restituisce gli URL riscritti.

Ulteriori informazioni

Per altre informazioni sulla sintassi Razor e su alcuni metodi MVC correlati, vedere i siti Web seguenti: