我正在尝试使用我的ASP.NET MVC3应用程序中的路径,并尝试减少我的一些映射代码。我正在尝试在我的应用程序中尝试跨越许多不同实体的常见UserController / View。例如,您有商店和公司,每个都有自己的一组用户。有没有办法减少以下两条路线:
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} default)设置为:{entity} +“Index”,以便它可以用于与约束匹配的实体实体。
我这里只减少2条路线到1,但我真正的问题只涉及这两个实体,如果我可以使用它,我可以将它用于其他必须模仿相同功能的控制器和其他动作(创建,编辑等)。
由于
答案 0 :(得分:0)
我认为答案必须在那里,我只是没有寻找正确的东西,我搜索了StackOverflow一点点,并且能够找到这个帮助我开发解决方案的问题:
asp.net mvc complex routing for tree path
我可以设置一条看起来像这样的路线:
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);
}
}
最后,我总是把这个问题复杂化并且不需要这个,但很高兴知道你可以拥有这种灵活性