Asp.net mvc 2 MVC 2.0电子商店中类别名称的动态路由

Asp.net mvc 2 MVC 2.0电子商店中类别名称的动态路由,asp.net-mvc-2,c#-4.0,url-routing,Asp.net Mvc 2,C# 4.0,Url Routing,我目前正在使用ASP.NET MVC 2.0开发一个电子商店。我已经把它大部分安装好并运行起来了,但困扰我的部分是路由。我想要这个: 到目前为止,我已经能够通过以下方法解决此问题: routes.MapRoute( "Category", "{alias}/{pageNumber}", new { controller = "Categories", action = "Browse", pageNumber = 1 })

我目前正在使用ASP.NET MVC 2.0开发一个电子商店。我已经把它大部分安装好并运行起来了,但困扰我的部分是路由。我想要这个:

到目前为止,我已经能够通过以下方法解决此问题:

routes.MapRoute(
            "Category",
            "{alias}/{pageNumber}",
            new { controller = "Categories", action = "Browse", pageNumber = 1 });
但这比我想要的更吸引人

在阅读了这个网站的一些问题和答案后,我发现了一个特别有趣的解决方案,需要我通过编程为我的每一个类别注册一条路线,所以本质上我会这样做

 foreach (var c in Categories)
        {
            routes.MapRoute(
                c.Name,
                "{" + c.Alias + "}/{action}/...anything else",
                new { controller = "Category", action = "Index" }).RouteHandler = new CateegoryRouteHandler(c);
        }
你觉得怎么样?这是个好主意吗?我可能会有大约200个类别,在路由表中有太多的“路由”吗?你能提出另一个解决方案吗

谢谢

问候,,
带有动态约束的单一路线可能是一个更优雅的解决方案。只需设置一个仅与您的类别匹配的约束

     routes.MapRoute(
        "Category",
        "{alias}/{pageNumber}",
        new { controller = "Categories", action = "Browse", alias = UrlParameter.Optional, pageNumber = 1 },
        new { alias = new CategoryMatchConstraint() } );


 public class CategoryMatchConstraint : IRouteConstraint
 {
      public bool Match( HttpContextBase httpContext,
                         Route route,
                         string parameterName,
                         RouteValueDictionary values,
                         RouteDirection routeDirection )
      {
           var category = values.Values[parameterName] as string;
           if (string.IsNullOrEmpty(category))
           {
                return false;
           }
           using (var db = new MyDatabaseContext())
           {
                return db.Categories.Any( c => c.Name == category );
           }
      }
}

哦,太好了!这就像一个符咒!不知道路线限制。谢谢!您好@tvanfosson,如果有5万个类别,性能如何。据我所知,有一个路由表缓存或类似的东西,但在任何情况下,它检查数据库。