解析相对于应用程序根目录的映像uri

时间:2016-01-07 21:15:21

标签: asp.net asp.net-mvc razor relative-path

我正在使用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")有同样的问题。它相对于请求的路径进行解析,而不是应用程序根目录。

1 个答案:

答案 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。

到目前为止,这段代码并没有在我的应用程序中引起任何问题,并解决了这个问题。