この記事は、Web ページ Razor V3 のハイパーテキスト転送プロトコル (HTTP) 要素に埋め込まれたチルダ (~) 表記が、インターネット インフォメーション サービス (IIS) URL の書き換えを使用して元の URL にマップされる問題を解決するのに役立ちます。
元の製品バージョン: ASP.NET
元の KB 番号: 2905164
現象
Microsoft ASP.NET Web ページ Razor V3 では、<SCRIPT/>、<LINK/>などの HTML 要素に埋め込まれたチルダ (~) 表記は、IIS URL の書き換えを使用して元の URL にマップされます。 たとえば、asp.net/contentの下の要求が asp.net の URL に書き換えられた場合、<A href='~/content/'/>のhref属性は/ではなく/content/content/に解決されます。 そのため、Web ページ Razor V2 のページは、Web ページ Razor V3 または model-View-Controller (MVC) 5 ASP.NET アップグレードした後に正しく動作しない可能性があります。
原因
この問題は、WEB Pages Razor V3 で URL のチルダ表記の動作が変更され、MVC との一貫性 ASP.NET 高くなるために発生します。 ASP.NET MVC では、 Url.Content メソッドまたは Html.ActionLink メソッドのチルダ表記は、IIS URL 書き換え規則に関係なく、元の URL を生成します。
ただし、Web Pages Razor V2 では、IIS URL 書き換えモジュールが有効になっていると、URL のチルダ表記が書き換えられた URL にマップされます。 たとえば、content.asp.netの下の要求が asp.net/content/ の URL に書き換えられた場合、<A href='~/book/'/>のhref属性は /content/book/ に解決されます。 Web Pages Razor V3 では、同じ href 属性がブラウザーの元の URL である /book/に変換されます。
解決方法
Web Pages Razor V2 と同じ動作を使用して、書き換えられた URL にチルダ表記を解決するには、次のように、グローバル設定の各 Web ページまたは Global.asax のApplication_BeginRequestでIIS_WasUrlRewritten コンテキストを false に設定します。
protected void Application_BeginRequest(object sender, EventArgs e)
{
Context.Items["IIS_WasUrlRewritten"] = false;
}
Note
IIS_WasUrlRewritten コンテキストの変更は、HTML 要素だけでなく、MVC helper メソッドでもチルダ表記に影響します。 たとえば、false に設定されている場合、 Url.Content と Html.ActionLink のチルダ表記は、書き換えられた URL を返します。
詳細
Razor 構文と関連する MVC メソッドの詳細については、次の Web サイトを参照してください。