ASP.NET Core 8 MVC区域路由配置:省略默认Action并路径传Id
在ASP.NET Core 8 MVC中配置区域路由(省略默认Action并通过路径传递Id)
你需要调整区域路由的匹配规则,通过新增更具体的路由优先级来实现省略Index且用路径传递Id的需求,具体配置如下:
app.UseRouting(); // 优先匹配带Id的区域请求,自动映射到Index Action app.MapAreaControllerRoute( name: "DashboardWithId", areaName: "Dashboard", pattern: "Dashboard/{controller}/{id:int}", defaults: new { action = "Index" } ); // 保留区域默认路由,处理不带Id/指定其他Action的场景 app.MapAreaControllerRoute( name: "Dashboard", areaName: "Dashboard", pattern: "Dashboard/{controller=Home}/{action=Index}/{id?}" ); app.MapControllerRoute(name: "Default", pattern: "{controller=Home}/{action=Index}/{id?}");
配置说明
- 优先级匹配:第一个路由
DashboardWithId是更具体的规则,会优先匹配Dashboard/{控制器名}/{数字Id}格式的URL,自动将请求映射到对应控制器的Index方法,无需在URL中显式写Index。 - 参数约束:
id:int确保只有整数格式的参数会匹配该路由,避免和其他路由规则冲突。 - 兼容原有场景:第二个保留的区域默认路由,可处理不带Id或需要指定其他Action的请求。
控制器方法适配
你的现有控制器方法签名无需修改:
public ActionResult Index(int id)
路径中的Id会自动绑定到方法参数,URL后的查询参数(如at=organization&ttid=-1)也会正常被框架处理(若方法中定义了对应参数则自动绑定)。
验证效果
现在访问https://localhost:7280/Dashboard/Waterbody/1245839?at=organization&ttid=-1,会直接触发WaterbodyController的Index方法,id参数值为1245839,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Corey
相关产品推荐
相关产品推荐

