Asp.net mvc 3 ASP.NET MVC3路由映射简化帮助
我正在尝试使用ASP.NET MVC3应用程序中的路由,并尝试减少一些映射代码。我正在尝试使用一个通用的UserController/视图来跨多个不同的实体访问我的应用程序。例如,您有商店和公司,每个商店和公司都有自己的用户集。有没有办法减少以下两条路线:Asp.net mvc 3 ASP.NET MVC3路由映射简化帮助,asp.net-mvc-3,routing,Asp.net Mvc 3,Routing,我正在尝试使用ASP.NET MVC3应用程序中的路由,并尝试减少一些映射代码。我正在尝试使用一个通用的UserController/视图来跨多个不同的实体访问我的应用程序。例如,您有商店和公司,每个商店和公司都有自己的用户集。有没有办法减少以下两条路线: routes.MapRoute( "StoreUsers", // Route name "Store/Details/{entityID}/User/Index", // U
routes.MapRoute(
"StoreUsers", // Route name
"Store/Details/{entityID}/User/Index", // URL with parameters
new { controller = "User", action = "StoreIndex"} // Parameter defaults
);
routes.MapRoute(
"CompanyUsers", // Route name
"Company/Details/{entityID}/User/Index", // URL with parameters
new { controller = "User", action = "CompanyIndex"} // Parameter defaults
);
类似这样的东西
routes.MapRoute(
"EntityUsers", // Route name
"{entity}/Details/{entityID}/User/Index", // URL with parameters
new { controller = "User", action = entity + "Index"} // Parameter defaults
new { entity = "(Store|Company)" } //Parameter constraints
);
并将{action}参数(和{action}默认值)设置为:{entity}+“Index”,以便它可以用于匹配约束的实体
我只是将2条路由减少到1条,但我真正的问题涉及的不仅仅是这两个实体,如果我能让它工作,我可以将它用于其他必须模拟相同功能和其他操作的控制器(创建、编辑等)
谢谢我想答案一定在那里,我只是没有寻找正确的东西,我搜索了一下StackOverflow,找到了这个问题,帮助我找到了解决方案: 我可以设置一条如下所示的路线:
routes.MapRoute(
"EntityUsers", // Route name
"{entity}/Details/{entityID}/{controller}/{subaction}/{id}", // URL with parameters
new {controller = "User", subaction = "Index", id = UrlParameter.Optional}, // Parameter defaults
new {entity = "(Lender|Dealer)", controller="User"}
).RouteHandler = new UserRouteHandler();
UserRouteHandler类如下所示:
public class UserRouteHandler : IRouteHandler {
public IHttpHandler GetHttpHandler(RequestContext requestContext) {
string entity = requestContext.RouteData.Values["entity"] as string;
string subaction = requestContext.RouteData.Values["subaction"] as string;
if (entity != null && subaction != null)
{
requestContext.RouteData.Values["action"] = entity + subaction;
}
return new MvcHandler(requestContext);
}
}
最后,我把问题复杂化了,不需要这个,但很高兴知道你可以有这种灵活性