ASP.NET MVC属性路由参数异常问题求助
问题分析与解决方案
问题原因
你的核心问题是特性路由未生效,导致请求被传统默认路由错误匹配:
你给Index方法添加了[Route("/Books/{id?}")]特性路由,但如果项目中仅配置了传统默认路由(MapControllerRoute),却未启用特性路由支持(MapControllers),这个特性路由不会生效。此时访问/Books/xxx会触发传统路由逻辑:将Books识别为控制器名,xxx识别为Action名,但你的BooksController里只有Index方法,不存在对应名称的Action,因此抛出异常。
解决步骤
打开项目的Program.cs文件,调整路由配置:
- 如果你需要保留传统默认路由,必须添加启用特性路由的代码:
// 保留传统默认路由(可选) app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); // 关键:启用特性路由支持 app.MapControllers(); - 如果你不需要传统默认路由,可直接仅保留特性路由配置:
app.MapControllers();
额外优化建议
你可以将特性路由改为更灵活的写法,无需硬编码控制器名称:
[Route("[controller]/{id?}")] public IActionResult Index(string id) { return View(id); }
这样当控制器名称修改时,路由规则会自动同步,减少维护成本。
内容的提问来源于stack exchange,提问作者JackFord
相关产品推荐
相关产品推荐

