mvc4如何将路由重定向到路由配置中的新版本

时间:2014-08-22 03:29:03

标签: asp.net-mvc-4 routes maproute

我最初在RouteConfig中有这个maproute

            routes.MapRoute(
        name: "thread",              
        url: "{Areamix}/{urltitle}/{id}/thread",
        defaults: new {controller = "thread", action = "view"
        });

那条路线太长了所以我把它缩短到

            routes.MapRoute(
        name: "thread",              
        url: "{urltitle}/{Areamix}-{id}",
        defaults: new
        {
            controller = "thread",
            action = "view"
        });

正如您所知,旧的网页现在返回404错误,因为路由网址已更改,如何将旧的索引页面重定向或永久重定向到较新的MapRoute?他们都有共同的功能,如 {id} 任何建议都会非常感谢。

1 个答案:

答案 0 :(得分:0)

保留原有的MapRoute,但将其映射到新的控制器(现在是Redirect而不是view

    routes.MapRoute(
      name: "thread",              
      url: "{Areamix}/{urltitle}/{id}/thread",
      defaults: new {controller = "thread", action = "Redirect" // Action is now Redirect (instead of view)
    });

然后,在Controller中创建一个新的Action:

public ActionResult Redirect()
{
    // Now rebuild your url in new format:
    var link = RouteData.Values["urltitle"] + RouteData.Values["Areamix"] + "-" + RouteData.Values["id"];
    return RedirectPermanent(link);
}

现在,所有与旧maproute匹配的请求都会转到Redirect Action,然后格式化为新的maproute格式。

我没有测试它,但它应该像那样工作。

相关问题