我想创建看起来有点像这样的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