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