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

Han*_*fer 3 asp.net-mvc asp.net-mvc-routing

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

我们已经构建了一个ASP.NET MVC应用程序来替换我们的"旧"ASP.NET webforms怪物.我们仍然希望支持那里使用的一些旧URL,因为它们仍然可以在某个地方的电子邮件等中浮动.

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

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

    routes.MapRoute(
        "Password",
        "Password.aspx",
        new {
            controller = "Home",
            action = "Password",
            id = ""
        }
    );
Run Code Online (Sandbox Code Playgroud)

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

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

jch*_*apa 5

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

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

routes.MapRoute(
        "Password",
        "Password.aspx",
        new {
            controller = "Home",
            action = "Password",
            id = ""
        }
    );
Run Code Online (Sandbox Code Playgroud)

  • 我还建议将旧URL映射到*重定向*到新URL.这也可以帮助搜索引擎更好地索引您的网站. (7认同)