You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC控制器URL映射:为何Controller后缀可省略?

ASP.NET Core MVC控制器URL映射机制解析

核心疑问解答

  • 为什么DefaultTomatoController能通过/DefaultTomato访问?
    这是ASP.NET Core MVC的默认命名约定:路由系统会自动忽略控制器类名末尾的Controller后缀,用剩余部分作为路由中的控制器段名称。所以DefaultTomatoController对应的路由段就是DefaultTomato,直接通过该路径即可访问。

  • 为什么无Controller后缀的DefaultTomato2也能通过/DefaultTomato2访问?
    路由系统做了兼容处理:如果控制器类名本身没有Controller后缀,就直接使用原类名作为路由段名称。不过官方推荐控制器类名加上Controller后缀,保证项目代码风格的一致性。

底层实现逻辑

ASP.NET Core MVC在启动时会通过ControllerFeatureProvider扫描程序集中的控制器类,识别符合条件的类型(比如继承自ControllerBase/Controller,或带有[Controller]特性)。

在构建路由元数据的过程中,框架会处理控制器名称:

  1. 检查控制器类名是否以Controller结尾;
  2. 如果是,自动裁剪掉末尾的Controller字符串,用剩余部分生成路由映射;
  3. 如果不是,则直接使用原类名作为路由段的匹配值。

这种设计是为了遵循"约定大于配置"的原则,减少开发者的路由配置工作量,同时保留一定的灵活性。

内容的提问来源于stack exchange,提问作者Rob K.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:32:00