ASP.NET Core中控制器的自动检测与路由机制解析
ASP.NET Core 控制器自动发现与路由注册机制解析
核心原因:程序集扫描 + 控制器约定
当你在ConfigureServices中调用services.AddControllers()时,ASP.NET Core会自动触发程序集扫描逻辑:
- 默认扫描当前应用程序的主程序集(即项目编译生成的DLL)
- 自动识别符合以下任意“控制器约定”的类:
- 继承自
ControllerBase或Controller基类 - 类名以
Controller后缀结尾(比如你的SomeController) - 带有
[ApiController]或[Controller]特性(即使类名无Controller后缀,带特性也会被识别)
- 继承自
路由注册的流程
app.UseRouting():启用路由中间件,为后续的路由匹配建立基础endpoints.MapControllers():将之前扫描到的所有控制器中,通过[Route]特性定义的路由规则,自动注册到路由系统中,不需要手动引用每个控制器类
自定义扫描范围(可选)
如果你的控制器不在主程序集里,可以通过扩展方法指定额外的扫描程序集:
services.AddControllers() .AddApplicationPart(System.Reflection.Assembly.Load("Your.Other.Assembly.Name"));
关于“隐藏配置”的澄清
不需要额外的隐藏配置文件,默认的自动扫描是ASP.NET Core MVC/API框架的内置行为,属于约定大于配置的设计思路。官方文档中在「控制器发现」章节有明确说明,核心就是通过约定减少手动配置的工作量。
内容的提问来源于stack exchange,提问作者nreh
相关产品推荐
相关产品推荐

