0

通常,我希望在生成 URL 时使用默认路由(“向后”映射),即使我已经添加了备用或旧路由来达到某个操作(“转发”):

routes.MapRoute("Legacy", "legacy/home/index",     // want forward-only mapping!
    new { controller = "Home", action = "Index" };
routes.MapRoute("Default", "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }

在这种情况下,我仍然希望在调用时使用默认路由:

@ActionLink("Index", "Home")                       // generates legacy URLs ;(

在线程:Routing legacy requests with and without querystring(issue #1)中,解决方案是为每个 legacy 路由添加两个 MapRoute 语句,或者在每个 ActionLink 调用中指定路由名称。

有没有办法定义用于 URL -> 操作映射的路由,而不是相反的路由?

4

1 回答 1

0

我找不到让路由语句只应用一种方式的方法,所以我安装了 IIS URL Rewrite 模块。这可以透明地重写 URL,或者在遗留 URL 的情况下进行 301 重定向。

无论如何,这是一个比编辑 global.asax 更易于维护的解决方案。

于 2012-08-14T01:16:25.170 回答