2013-11-04 199 views
0

我有一個webservice項目正在擴展到承載多個API而不是一個,所以我想在不破壞舊版本的情況下清理路由。常坐斷控制器命名的API和接受的參數,如這樣做的主要API:MVC路由重定向

api/{language}/{action}/{*parameters} 

現在,我有一個要容納每個的API在自己控制的地區命名的API和路線將是這樣的:

api/{controller}/{language}/{action} 

我還需要舊路線是已經使用舊路線遺留應用程序可用,我希望只是爲了能夠創建能夠趕上老尋路第2個「傳統」路線並使用新的控制器。我試過這個,但它只適用於新的位置和ikd一個返回404。

api/{language}/{action}/{*parameters}", 
new { controller = "api1", action = "Index", language = "json" } 

有關如何完成此任何想法?我嘗試了RouteMagic,但它似乎沒有工作。也許我把重定向設置錯了。

+0

我有點困惑 - 任何匹配第二條路線也將匹配第一條。這應該如何工作? –

回答

0

好了,想通了,得到一個三明治後...只是需要增加路由約束使舊版本將不會在新的路線格式趕上:

routes.MapRoute(
     "API_default", 
     "api/{controller}/{language}/{action}", 
     new { controller = "api1", action = "Index", language = "json" }, 
     new { language = "json|xml" } 
    ); 

    routes.MapRoute(
     "API_legacy", 
     "api/{language}/{action}/{*parameters}", 
     new { controller = "api1", action = "Index", language = "json", parameters = UrlParameter.Optional }, 
     new { language = "json|xml" } 
    );