【问题标题】:Why is ASP.NET MVC ignoring my trailing slash?为什么 ASP.NET MVC 会忽略我的斜杠?
【发布时间】:2009-06-22 12:48:11
【问题描述】:

考虑以下路线:

    routes.MapRoute(
        "Service", // Route name
        "service/", // URL with parameters
        new {controller = "CustomerService", action = "Index"} // Parameter defaults
        );

使用Url.Action("Service", "CustomerService") 会生成/service 的url,而不是预期的/service/

有什么办法可以让它工作,还是我必须求助于实现我自己的从RouteBase派生的路由?

【问题讨论】:

  • 请问为什么这很重要?就浏览器而言,他们不在乎。并且就基于此路由构建您自己的路由 url 而言,尾随 / 将在需要时自动添加。
  • 不过,真的没有理由打扰 - 即使是遗留问题。如果尾随斜杠完全不同,则没有区别。所有旧网址都将有效,所有新网址都将适用于旧位置。
  • 是的,但是对于 SEO,它会有重复的 url 问题。旧书签和搜索引擎结果仍会使用带有斜线的旧网址。即使我将斜线 301 转换为非斜线版本,它仍然是一个需要一些额外代码来修复的问题。
  • 只是关于尾部斜杠无关紧要的主题......在这种情况下这是正确的,但在许多其他情况下它们确实很重要,所以我不会把这种说法当作福音。跨度>
  • @Tomas Lycken - 这非常重要。如果您的 URL 之前使用尾部斜杠编入索引,那么尝试将所有旧 URL 301 转换为新的无斜杠 URL,您将陷入痛苦的世界。如果你不这样做,你的页面排名就会受到打击,因为谷歌会在两个单独的 URL 处惩罚重复的内容。

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


【解决方案1】:

Legenden - 没有立即解决问题的方法。您可能遇到过Jason Young's blog post 关于这个问题的信息,这是非常有用的。 Scott Hanselmann posted a reply到这里,基本说明他觉得没什么大不了,如果是的话,可以利用新的IIS7重写模块来解决。

但最终,您可能希望查看 murad 在 StackOverflow 上针对类似问题发布的解决方案:Trailing slash on an ASP.NET MVC route

【讨论】:

    【解决方案2】:

    在您的页面加载事件中添加:

    Dim rawUrl As String = HttpContext.Current.ApplicationInstance.Request.RawUrl
    If Not rawUrl.EndsWith("/") Then
        HttpContext.Current.ApplicationInstance.Response.RedirectPermanent(String.Format("~{0}/", rawUrl))
    End If
    

    【讨论】:

    • 这不是问题所在,另外,mvc 中没有页面加载事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    相关资源
    最近更新 更多