我想創建看起來有點像這樣的URI: http://hostname/mobile/en/controller/action
手機或http://hostname/en/controller/action
桌面(非手機)。路由總是去第一個maproute
我的路由表目前看起來像這樣(的Global.asax.cs),當我嘗試做一個 return RedirectToAction("Add", "User");
它時,我想從/en/User/List
桌面瀏覽器總是重定向到/mobile/en/User/Add
發生
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Mobile", // Route name
"mobile/{language}/{controller}/{action}/{id}", // URL with parameters
new { language = "en", controller = "Route", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { language = @"en|us" } // validation
);
routes.MapRoute(
"Default", // Route name
"{language}/{controller}/{action}/{id}", // URL with parameters
new { language = "en", controller = "Route", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { language = @"en|us" } // validation
);
問題它要去/en/User/Add
。 移動版本可以正常工作,但我相信這是因爲第一個「移動」路線始終被視爲匹配的路線,即使它在開始時沒有/ mobile /。
我試圖使用相同的控制器兩個版本,但我堅持它總是重定向到移動路線。這意味着RedirectToRoute
不是完美的,因爲我想要動態路線。
感謝您的幫助。
非常感謝René,看起來就像我希望做的一樣。 你能告訴我哪裏最好的地方是把擴展方法? – Adrian 2010-06-28 09:08:04
將靜態類ControllerExtensions放置在您想要的任何位置。在控制器中,您想要使用重定向,請確保包含擴展類所在的名稱空間。然後,在控制器中的任何位置,可以使用this.CusomRedirectToRoute(「Home」,「Index」,routeValues); 如果需要,還可以添加另一個將null作爲routeValues值的擴展方法。 – 2010-06-30 12:32:49
如果你想整理它,我的評論的後半部分可以用整潔乾淨的系統來取代這個帖子中描述的路線名稱:http://stackoverflow.com/questions/363211/how - 可以-I-GET-的路線名稱,在控制器功能於ASP淨MVC – 2010-06-30 20:44:38