2014-10-06 89 views
1

爲了討論起見,我們假設我有兩個控制器:Alpha和Beta。而且,假設我想將它們映射到相同的動作,但在一個或另一個控制器上:/ Alpha/DoThis &/Beta/DoThis會發送到/ Alpha/DoThis或甚至是/ Omega/DoThis。如何做到這一點?對一個控制器有不同動作的路由控制器

回答

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重定向)。

+0

如果我想匹配任何控制器?我想我需要修改originalController與任何正則表達式?即「*」? – EDanaII 2014-10-06 21:00:54

+0

只需從'MapRoute'中刪除'constraint'參數(默認約束類似於'。*')。 – 2014-10-07 12:50:42