【问题标题】:URL forwarding+masking triggers double root directory for Url.Content() & Html.Action() under ASP.NET MVC 3 RCURL 转发+屏蔽触发 ASP.NET MVC 3 RC 下 Url.Content() & Html.Action() 的双根目录
【发布时间】:2011-05-12 09:45:07
【问题描述】:

(注意:试图寻找类似的问题,但最接近的问题似乎仍然与我的问题不匹配。即MVC - Application root appears twice in url using Url.Content/Url.Action

我目前有两个 ASP.NET MVC 3 RC 应用程序在一个域下运行,即

mydomain.com/app1

mydomain.com/app2

现在,因为它是一个单独的应用程序,所以我注册了另一个域名并启用了掩码转发到其中一个应用程序 (即http://foo.com 将加载http://mydomain.com/app1 并且在浏览器中,它只会显示http://foo.com,而不是http://mydomain.com/app1

嗯,这就是 MVC 开始抱怨的地方。 Url.Content() 和 Html.Action() 都会生成意外的 URL。 例如,在 Html.Action() 的情况下,如果我有@Html.ActionLink("About", "Index", "About"),我期望http://foo.com/about,但最终得到http://foo.com/app1/about

因为http://foo.com/app1/about 翻译成http://mydomain.com/app1/app1/about,显然链接不起作用。

同样,对于 Url.Content,如果我有 href="@Url.Content("~/Content/Site.css")",浏览器将无法加载样式表,因为它认为位置在 http://foo.com/app1/Content/Site.css , 而不是 http://foo.com/Content/Site.css

有没有办法让 MVC 忘记它的起始目录(即从其生成的 URL 中删除“app1/”?)

感谢阅读,如果需要更多信息,请告诉我。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-routing url-masking


    【解决方案1】:

    目前,有一些解决方法。

    对于 Url.Content(),我们将简单地从 Url.Content("~/...") 中删除“~”,以便摆脱该相对路径(即 /app1

    至于 Html.ActionLink(),解决方案似乎很混乱,因为总是假定相对路径,所以这里的解决方法是临时的。谁有更好的解决方案?

    public static MvcHtmlString ActionLinkAbsolute(
                        this HtmlHelper<dynamic> htmlHelper, string linkText, string actionName, string controllerName)
                    {
                        MvcHtmlString result = LinkExtensions.ActionLink(htmlHelper, linkText, actionName, controllerName);
                        result = new MvcHtmlString(result.ToHtmlString().Replace(VirtualPathUtility.ToAbsolute("~"), String.Empty)); 
                        return result;
                    }
    

    这里的解决方法并非没有后果。为了支持 URL 屏蔽,并且忽略相对路径,http://mydomain.com/app1 不会生成预期的链接,因为它总是会删除相对路径。它并不完美,但这是我可以忍受的缺点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-16
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      相关资源
      最近更新 更多