【问题标题】:ASP.NET MVC: How to "understand" legacy URLs but not write them?ASP.NET MVC:如何“理解”遗留 URL 但不编写它们?
【发布时间】:2009-12-29 18:00:26
【问题描述】:

请原谅令人困惑的标题;)

我们已经构建了一个 ASP.NET MVC 应用程序来替换我们“旧”的 ASP.NET 网络表单怪物。我们仍然希望支持其中使用的一些旧 URL,因为它们可能仍会在 E-Mail 等中的某个地方浮动。

例如:我们的旧系统使用了 URL ~/Password.aspx,新 MVC 系统中的 URL 是 ~/Home/Password。

为了支持这些旧网址,我们只是将它们添加到路由表中,例如

    routes.MapRoute(
        "Password",
        "Password.aspx",
        new {
            controller = "Home",
            action = "Password",
            id = ""
        }
    );

这很好用,但是每当我们在代码中使用 Url.Action("Password", "Home") 时,它都会生成旧 URL(“~/Password.aspx”而不是“~/Home/Password”) .由于我们想慢慢淘汰旧的 URL,如果 MVC 路由仍然“理解”旧的 URL 但只使用/编写新的 URL,那就太好了。

有没有办法做到这一点?

【问题讨论】:

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


    【解决方案1】:

    将新路由放在路由表上旧路由的上方。路线越高,优先级越高:

    routes.MapRoute(
          "PasswordNew",
          "Home/Password",
          new {controller = "Home",
               action = "Password",
               id = "" 
           }
        );
    
    routes.MapRoute(
            "Password",
            "Password.aspx",
            new {
                controller = "Home",
                action = "Password",
                id = ""
            }
        );
    

    【讨论】:

    • 我还建议将旧 URL 映射到 重定向 到新 URL 的内容。这也可以帮助搜索引擎更好地索引您的网站。
    • Argl,这么简单;我自己怎么没想到这一点;)非常感谢,它不适用于我们案例中的所有 URL/路由(有些非常复杂),但对于一些。
    猜你喜欢
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多