Asp.net mvc MVC3 URL路由

Asp.net mvc MVC3 URL路由,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc Routing,我想创建一个网站,以以下方式动态映射路线: 到目前为止,我已经添加了一条到Global.asax的新路线 routes.MapRoute( "IFAMainCategory", // Route name "{IFACategoryName}", // URL with parameters new { controller = "Home", action = "GetSubCategories", IFACategoryName=1} // Parameter defaults );

我想创建一个网站,以以下方式动态映射路线:



到目前为止,我已经添加了一条到Global.asax的新路线

routes.MapRoute(
"IFAMainCategory", // Route name
"{IFACategoryName}", // URL with parameters
new { controller = "Home", action = "GetSubCategories", IFACategoryName=1} // Parameter defaults
);
但这会把作为标准的默认路线弄乱


有什么办法可以控制吗?

您需要更改路线:

 routes.MapRoute("MyCustomRoute", "MyCategory1/{action}/{id}",
     new { controller = "MyCategory1", action = "MySubCategory", id = UrlParameter.Optional });

// Then the default route

基本上,由于您刚刚制作了一个巨大的路线捕捉器,所有路线都与该路线匹配。如果要将特定路线映射到控制器,则需要转到特定路线

您需要在路由名称中包含MyCategory1

routes.MapRoute( "IFAMainCategory", 
// Route name "MyCategory1/{IFACategoryName}", 
// URL with parameters new { controller = "Home", action = "GetSubCategories", IFACategoryName=1} // Parameter defaults );
例如,查看另一篇文章,并查看路由调试器


不幸的是,我认为你无法直接实现你想要的

您需要某种方法来分隔路线,例如将“类别”放在文件夹中:

routes.MapRoute(
                "IFAMainCategory", // Route name
                "categories/{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "GetSubCategories", IFACategoryName=1 } 
            );
另一个选项是,您可以在应用程序启动时的默认路由之前为每个父类别注册路由:

routes.MapRoute(
                "IFAMainCategory 1", // Route name
                "MyCategory1/{subcategory}", // URL with parameters
                new { controller = "Home", action = "GetSubCategories", IFACategoryName=1, subcategory =  UrlParameter.Optional } 
            );

routes.MapRoute(
                "IFAMainCategory 2", // Route name
                "MyCategory2/{subcategory}", // URL with parameters
                new { controller = "Home", action = "GetSubCategories", IFACategoryName=2, subcategory =  UrlParameter.Optional } 
            );