ASP.NET Core MVC 2.0路由失效求助:路由配置问题排查
嘿,我帮你梳理了下你的路由配置,问题主要出在两个地方,咱们一个个说:
1. 路由默认值的键拼写错误
你在路由默认值里写了Controllers = "Department",但ASP.NET Core MVC的路由约定里,控制器对应的参数键是单数的controller(注意是小写c,单数形式),框架根本识别不了Controllers这个键,这就导致路由无法正确映射到你的DepartmentController。
同样,虽然Action大小写不敏感,但按框架约定建议用小写的action,保持代码一致性。
2. 路由顺序与默认值逻辑矛盾
ASP.NET Core的路由是按注册顺序从上到下匹配的,更具体的路由规则应该放在前面,避免被更宽泛的规则提前拦截。另外你的route2配置逻辑有问题:
builder.MapRoute("route2", "Department/Add", new { Controllers = "Department", Action = "Index" });
这条规则意味着当用户访问Department/Add路径时,框架会去执行DepartmentController.Index方法,而不是Add方法——这大概率和你的预期相反吧?如果你的目的是访问Department/Add时触发Add动作,这个默认值完全是多余的,甚至是错误的。
修正后的路由配置
我把你的代码修正了一下,你可以直接参考:
public static class ApplicationRouteProfiler { public static void Routing(IRouteBuilder builder) { // 先注册更具体的路由,避免被宽泛规则拦截 builder.MapRoute( name: "route2", template: "Department/Add", defaults: new { controller = "Department", action = "Add" } ); // 根路径默认路由,访问网站根目录时触发Department/Add builder.MapRoute( name: "route1", template: "", defaults: new { controller = "Department", action = "Add" } ); } }
另外顺便提下,你的类名ApplicationRoteProfiler和方法名Routeing有拼写错误,应该是ApplicationRouteProfiler和Routing,虽然这不是路由失效的直接原因,但规范命名能减少后续维护的麻烦。
最后别忘了确认你的DepartmentController里确实存在Add和Index方法,并且继承自Controller基类哦!
内容的提问来源于stack exchange,提问作者user9430427

