我正在使用Asp.Net MVC 5.假设这个问题我的应用程序是从localhost:9000/app
提供的。
我在_layout.cshtml
:
<img src="@Url.Content("~/Content/logo.png")" />
当用户请求localhost:9000/app/foobar
时,图片URI已正确解析为localhost:9000/app/Content/logo.png
。
但是,当用户请求localhost:9000/app/folder/bender_is_great
时,图片URI会解析为localhost:9000/app/folder/Content/logo.png
。
如何让图像URI始终相对于应用程序根解析,而不是相对于请求的路径?
修改:Server.MapPath("~/Content/logo.png")
有同样的问题。它相对于请求的路径进行解析,而不是应用程序根目录。
答案 0 :(得分:1)
原来这是我的网址重写规则,适用于没有hashbang(#!)的友好HTML5网址。重写引擎在应用程序上设置了一个项目:"IIS_WasUrlRewritten"
。 Url.Content(...)
calls into UrlUtil
,关注此项并更改其行为。这个Microsoft Support page说:
要使用与网页Razor V2中相同的行为解决重写URL的波浪符号,请在每个网页中将IIS_WasUrlRewritten上下文设置为false,或者在Global.asax中将Application_BeginRequest设置为全局设置,如下所示:
protected void Application_BeginRequest(object sender, EventArgs e)
{
Context.Items["IIS_WasUrlRewritten"] = false;
}
注意IIS_WasUrlRewritten上下文的更改不仅会影响HTML元素中的波浪符号,还会影响MVC帮助器方法中的波浪符号。例如,如果将其设置为false,Url.Content和Html.ActionLink中的波浪符号将返回重写的URL。
到目前为止,这段代码并没有在我的应用程序中引起任何问题,并解决了这个问题。