【问题标题】:Resolving an image uri relative to application root解析相对于应用程序根目录的图像 uri
【发布时间】:2016-01-07 21:15:20
【问题描述】:

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

【问题讨论】:

  • 这应该可以正常工作!你有任何自定义路由配置吗?
  • 不,只是 MVC 项目附带的基本 HomeController 路由配置。原来这是我的 URL 重写规则。

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


【解决方案1】:

原来这是我为没有井号 (#!) 的友好 HTML5 URL 的 URL 重写规则。重写引擎在应用程序上设置了一个项目:"IIS_WasUrlRewritten"Url.Content(...) calls into UrlUtil,关注此项目并更改其行为。这个Microsoft Support page 说:

要使用与 Web Pages Razor V2 中相同的行为将波浪符号解析为重写的 URL,请将每个网页中的 IIS_WasUrlRewritten 上下文或 Global.asax 中的 Application_BeginRequest 中的全局设置设置为 false,如下所示:

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

注意 IIS_WasUrlRewritten 上下文的更改不仅会影响 HTML 元素中的波浪符号,还会影响 MVC 辅助方法中的波浪符号。例如,如果设置为 false,则 Url.Content 和 Html.ActionLink 中的波浪号表示法将返回重写后的 URL。

到目前为止,这段代码没有在我的应用程序中造成任何问题,并且已经解决了问题。

【讨论】:

    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多