La notación tilde se asigna a las direcciones URL originales mediante la reescritura de direcciones URL de IIS en ASP.NET Web Pages Razor V3

Este artículo le ayuda a resolver el problema en el que la notación de tilde (~) incrustada en los elementos del Protocolo de transferencia de hipertexto (HTTP) en Páginas web Desinscritura V3 se asigna a las direcciones URL originales mediante la reescritura de la dirección URL de Internet Information Services (IIS).

Versión del producto original:   ASP.NET
Número KB original:   2905164

Síntomas

En Microsoft ASP.NET Web Pages Razor V3, la notación de tilde (~) incrustada en los elementos HTML, como , o se asigna a las direcciones URL originales mediante la reescritura de la dirección URL de <A/> <SCRIPT/> <LINK/> IIS. Por ejemplo, cuando las solicitudes debajo se reescriban en la dirección URL en , el asp.net/content atributo en se resuelve en en lugar de en asp.net href <A href='~/content/'/> /content/content/ / . Por lo tanto, es posible que las páginas de Páginas web de Razor V2 no funcionen correctamente después de actualizar a Páginas web Desa prueba V3 o ASP.NET Model-View-Controller (MVC) 5.

Causa

Este problema se produce porque el comportamiento de la notación de tilde en las direcciones URL se cambia en páginas web de Razor V3 para que sea coherente con ASP.NET MVC. En ASP.NET MVC, la notación de tilde en el método o el método produce las direcciones URL originales independientemente de las reglas de reescritura de Url.Content direcciones URL de Html.ActionLink IIS.

Sin embargo, en Páginas web, la notación de tilde en direcciones URL se asigna a las direcciones URL reescritas cuando el módulo de reescritura de direcciones URL de IIS está habilitado. Por ejemplo, cuando las solicitudes debajo se reescriban en la dirección URL en content.asp.net , el atributo in se resuelve en asp.net/content/ href <A href='~/book/'/> /content/book/ . En Páginas web Desenlaz v3, el mismo atributo se href traduce en , que es la dirección URL original en el /book/ explorador.

Solución

Para resolver la notación de tilde en las direcciones URL reescritas mediante el mismo comportamiento que en Páginas web Desa herramientas V2, establezca el contexto en false en cada página web o en IIS_WasUrlRewritten Application_BeginRequest Global.asax para la configuración global de la siguiente manera:

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

Nota

El cambio del contexto afecta a la notación de tilde no solo en los elementos IIS_WasUrlRewritten HTML, sino también en los MVC helper métodos. Por ejemplo, si se establece en false, la notación de tilde en Url.Content y devuelve las direcciones URL Html.ActionLink reescritas.

Más información

Para obtener más información sobre la sintaxis de Razor y sobre algunos métodos MVC relacionados, vaya a los siguientes sitios web: