在ASP.NET Core 2.1 MVC中,我具有以下映射路线:
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
HomeController
有操作
Index
显示默认网站页面Projects
显示项目列表Project
显示有关特定项目的详细信息(具有其ID作为输入)项目中还有其他控制器。
我希望通过以下方式更新路由:
Home
控制器操作被映射而URL中没有Home
。我不想在路由定义中列出所有动作,该规则应该是通用的。
HomeController.Index
=> /
HomeController.Projects
=> /Projects
(或更小写的projects
)HomeController.Project(id: 4)
=> /Project/4
(或更小写的project/4
)Controller/Action
。实现此目标的推荐方法是什么?有可能吗?
答案 0 :(得分:1)
routes.MapRoute(
name: "other",
template: "{controller}/{action}/{id?}");
routes.MapRoute(
name: "home",
template: "{action=Index}/{id?}",
defaults: new { controller = "Home" });
答案 1 :(得分:0)
要定义默认控制器而不在url中指定它,只需将其添加到“ defaults”参数中
要将这种路由结合到一条规则中,使用相同的基本url(即使用/Products
和/Products/4
)会更干净。然后,您可以使用:
routes.MapRoute(
name: "products",
template: "Products/{id?}",
defaults: new { controller = "Home", Action = "Products" });
根据您的结构,类似这样的方法应该起作用:
routes.MapRoute(
name: "products",
template: "{Action:regex(^(Products|Product)$)/{id?}",
defaults: new { controller = "Home" });
要处理不符合此规则的网址(包括基本/
),请在product-route之后添加原始默认路由。
routes.MapRoute(
name: "products",
template: "{Action:regex(^(Products|Product)$)/{id?}",
defaults: new { controller = "Home" });
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");