本文可帮助你解决网页 Razor V3 中嵌入的超文本传输协议 (HTTP) 元素中的波形符 (~) 表示法映射到原始 URL 的问题,方法是使用 Internet 信息服务 (IIS) URL 重写。
原始产品版本: ASP.NET
原始 KB 数: 2905164
现象
在 Microsoft ASP.NET 网页 Razor V3 中,嵌入在 HTML 元素中的<A/>
波形符(~)表示法,<SCRIPT/>
或使用 <LINK/>
IIS URL 重写映射到原始 URL。 例如,在将下面的 asp.net/content
请求重写为 URL asp.net
时, href
会将其中 <A href='~/content/'/>
的属性解析为 /content/content/
,而不是解析为 /
。 因此,升级到网页 Razor V3 或 ASP.NET Model-View-Controller (MVC) 5 后,网页 Razor V2 中的页面可能无法正常工作。
原因
出现此问题的原因是 URL 中的平铺表示法行为在网页 Razor V3 中更改,以便与 ASP.NET MVC 保持一致。 在 ASP.NET MVC 中,无论 IIS URL 重写规则如何,方法中的 Url.Content
平铺表示法或 Html.ActionLink
方法都会生成原始 URL。
但是,在网页 Razor V2 中,URL 中的平铺表示法映射到启用 IIS URL 重写模块时重写的 URL。 例如,在将下面的content.asp.net
请求重写为 URL asp.net/content/
时,将href
解析/content/book/
为 href
属性将转换为 /book/
浏览器的原始 URL。
解决方法
若要使用与网页 Razor V2 中相同的行为将平铺表示法解析为重写 URL,请在每个网页或 Global.asax 中Application_BeginRequest
将上下文设置为 IIS_WasUrlRewritten
false,如下所示:
protected void Application_BeginRequest(object sender, EventArgs e)
{
Context.Items["IIS_WasUrlRewritten"] = false;
}
注意
上下文的 IIS_WasUrlRewritten
更改不仅影响 HTML 元素中的平铺表示法,还影响方法中的 MVC helper
平铺表示法。 例如,如果设置为 false,则平铺表示法传入 Url.Content
并 Html.ActionLink
返回重写的 URL。
详细信息
有关 Razor 语法和一些相关 MVC 方法的详细信息,请转到以下网站: