ASP.NET MVC:如何“理解”遗留URL但不写入它们?

时间:2009-12-29 18:00:27

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

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

我们已经构建了一个ASP.NET MVC应用程序来替换我们的“旧”ASP.NET webforms怪物。我们仍然希望支持那里使用的一些旧网址,因为这些网址可能仍然存在于某个地方的电子邮件等中。

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

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

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

这很好用,但每当我们在代码中使用Url.Action(“密码”,“主页”)时,它会生成旧的URL(“〜/ Password.aspx”而不是“〜/ Home / Password”) 。由于我们想要慢慢淘汰旧的URL,如果MVC路由仍“理解”旧URL但只使用/写入新URL,那将是很好的。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:5)

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

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

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