【问题标题】:URL rewriting in MVC 3MVC 3 中的 URL 重写
【发布时间】:2011-12-23 15:42:24
【问题描述】:

我想访问带有用户友好 URL http://localhost/Content/Article/{id}/{title} 的文章,它在内部处理此 URL,如 http://localhost/Content/Article/{i}。我为这些 url 创建了一个 Url 路由规则,即

 routes.MapRoute(
                "Article",
                "{controller}/{action}/{id}/{title}",
                new { controller = "content", action = "article", id = UrlParameter.Optional, title = UrlParameter.Optional }
                );

但是它正在处理请求,但是 html 响应却搞砸了。它正在改变所有图像、锚点、css、javascript url。用 /Content/Article 替换根 url,我的 html 显示混乱。所有的css格式都消失了。我试过IIS7.0重写模块和Asp.nET路由,都给我这个问题。

【问题讨论】:

    标签: asp.net-mvc-3 url-rewriting


    【解决方案1】:

    确保所有对外部文件的引用都相对于您网站的根目录。

    这不是 ASP.NET 路由的问题,而是您如何引用外部文件的问题。

    【讨论】:

    • Url 是相对的,我在 View 中使用 @Url.Content("~/Content/Images/img.png") 作为图像源。我正在使用 Razor 视图。
    • 当使用 url localhost/Content/Article/10/title 时,它会带来正确的页面,但是它会修改 Img、Css url 以响应 html。我在根目录中有图像文件夹,图像应该是“/Images/img.png”,但响应返回“/Conten/Images/img.png”。同样,它也发生在 css 和脚本中。
    • 我将 Content 作为放置 css 和图像的物理文件夹,并且在我的站点中也有 ContentController。这可能是问题的根本原因吗?
    【解决方案2】:

    如果您在浏览器中明确输入正确的 url,您会得到正确的页面吗?

    我经常遇到这个问题,尤其是当我有区域时。我发现对所有 @Html.ActionLinks 等使用 T4MVC(NuGet 包)可以解决问题。例如,使用 T4MVC,而不是:

    <li>@Html.ActionLink("Home Page", "Index", "Home")</li>
    

    ...你可以写:

    <li>@Html.ActionLink("Home Page", MVC.Home.Index())</li>
    

    注意 MVC.Home.Index()。这就是 T4MVC 允许您取消魔术字符串(actionName 和 controllerName)的方式。换句话说,T4MVC 允许您使用 HtmlHelper.ActionLink 的以下重载:

    HtmlHelper.ActionLink(string linkText, ActionResult result)
    

    代替:

    HtmlHelper.ActionLink(string linkText, string actionName, string controllerName)
    

    出于我现在无法理解的原因(我忘记了原因!),这解决了我认为您遇到的问题。

    只需检查并查看在地址栏中输入所需的 URL 是否有效。如果是这样,那么坏的是链接,而不是路由。

    如果您仍然有问题,那么这不是答案...

    【讨论】:

      猜你喜欢
      • 2011-12-22
      • 2012-08-06
      • 2012-07-03
      • 2011-04-23
      • 2016-03-28
      • 2011-01-23
      • 2023-03-15
      • 2015-07-15
      • 2012-07-14
      相关资源
      最近更新 更多