1
爲了討論起見,我們假設我有兩個控制器:Alpha和Beta。而且,假設我想將它們映射到相同的動作,但在一個或另一個控制器上:/ Alpha/DoThis &/Beta/DoThis會發送到/ Alpha/DoThis或甚至是/ Omega/DoThis。如何做到這一點?對一個控制器有不同動作的路由控制器
爲了討論起見,我們假設我有兩個控制器:Alpha和Beta。而且,假設我想將它們映射到相同的動作,但在一個或另一個控制器上:/ Alpha/DoThis &/Beta/DoThis會發送到/ Alpha/DoThis或甚至是/ Omega/DoThis。如何做到這一點?對一個控制器有不同動作的路由控制器
~/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重定向)。
如果我想匹配任何控制器?我想我需要修改originalController與任何正則表達式?即「*」? – EDanaII 2014-10-06 21:00:54
只需從'MapRoute'中刪除'constraint'參數(默認約束類似於'。*')。 – 2014-10-07 12:50:42