Asp.net mvc 3 ASP.NET MVC3路由映射简化帮助

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

我正在尝试使用ASP.NET MVC3应用程序中的路由,并尝试减少一些映射代码。我正在尝试使用一个通用的UserController/视图来跨多个不同的实体访问我的应用程序。例如,您有商店和公司,每个商店和公司都有自己的用户集。有没有办法减少以下两条路线:

        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);
    }
}
最后,我把问题复杂化了,不需要这个,但很高兴知道你可以有这种灵活性