ASP.NET Core中builder.Services.AddControllers()的具体作用是什么?
builder.Services.AddControllers() 的作用及注释后仍可用的原因 核心作用
这行代码是ASP.NET Core用来给依赖注入容器注册控制器全套运行服务的关键调用,会把控制器工作必需的基础组件全部加入,包括:
- 控制器实例的创建与生命周期管理
- 请求数据到控制器方法参数的模型绑定
- 数据验证(比如
[Required]这类注解的校验逻辑) - 请求/响应的序列化格式化(默认的JSON处理就是靠它注册的服务支撑)
- 过滤器体系的基础支持(授权、异常处理、日志等过滤器都依赖这里注册的服务)
为什么注释掉还能跑WeatherForecastController?
ASP.NET Core 6+的模板做了优化:当项目里存在继承自ControllerBase的控制器类时,框架会隐式注册最基础的控制器支持服务,刚好能满足WeatherForecastController这种简单接口的需求——它只用到了基础路由和JSON返回,没涉及复杂特性。
但这种隐式注册的服务非常有限,如果后续你要添加以下功能,必须显式调用AddControllers(),否则肯定会出问题:
- 自定义模型绑定器
- 全局异常过滤器
- 支持XML或Protobuf这类非JSON的格式化
- API版本控制
- 属性注入(构造函数注入之外的注入方式)
总结
测试场景下注释掉能跑,但正式项目里绝对要保留这行代码,它是控制器功能完整运行的保障,避免后续扩展时踩坑。
内容的提问来源于stack exchange,提问作者g.pickardou
相关产品推荐
相关产品推荐

