将控制器与不同的操作路由到一个控制器

时间:2014-10-06 20:35:45

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

为了便于讨论,我们说我有两个控制器:Alpha和Beta。并且,让我们说,我想将它们映射到相同的动作,但是在一个或不同的控制器上:/ Alpha / DoThis& / Beta / DoThis被发送到/ Alpha / DoThis或甚至/ Omega / DoThis。一个人怎么可能做到这一点?

1 个答案:

答案 0 :(得分:0)

~/App_Start/RouteConfig.cs是我的猜测(或Application_Start如果你没有):

// just in case you need the alias
//var routes = RouteCollection.Routes;

routes.MapRoute(
    name: "RedirectSomeRoutes",
    url: "{originalController}/DoThis",
    defaults: new {
        controller = "Alpha", // Use this controller
        action = "DoThis",    // And use this action
    },
    // Setup constraints so it only runs against the supplied
    // matching controllers (e.g. Alpha, Beta and Omega)
    constraints: new {
        originalController = "^Alpha|Beta|Omega$"
    }
);

请注意,MVC与RouteTable中的第一个匹配项一起运行,因此您希望首先列出最具体的路由,并列出最后列出的最通用(通常为{controller}/{action}/{id})。

或者,您可以使用重写(在web.config内),这会在响应代码等方面为您提供更多权力(例如403重定向)。