ASP.NET Core 5加NewtonsoftJson仍报IServiceCollection缺AddControllers错误
问题核心根因
当前代码存在两处关键配置偏差,直接导致AddControllers扩展方法无法被识别:
- 混淆了ASP.NET Core管道与*传统OWIN(面向.NET Framework的旧管道)*的配置逻辑,引入
Microsoft.Owin、OwinStartup这类仅适配旧管道的引用,与ASP.NET Core的服务体系完全不兼容 - 缺少
AddControllers扩展方法所在的核心命名空间与程序集引用,仅添加Newtonsoft.Json相关依赖无法提供该方法
可落地解决步骤
- 移除错误的旧管道引用
删除代码顶部的using Microsoft.Owin;、using Owin;,同时删除类上方的[assembly: OwinStartup(typeof(ABSRestService.App_Start.Startup1))]启动特性——该特性仅被.NET Framework的OWIN管道识别,ASP.NET Core运行时不会执行对应逻辑。 - 补充缺失的框架NuGet包
通过NuGet包管理器安装与项目版本匹配的核心依赖:Microsoft.AspNetCore.Mvc.Core:该包是提供AddControllers扩展方法的核心来源,注意仅安装Microsoft.AspNetCore.Mvc.NewtonsoftJson包无法解决问题,后者仅提供Newtonsoft.Json的序列化扩展,不包含基础控制器服务注册逻辑- 适配ASP.NET Core 5.0的
Swashbuckle.AspNetCore包:用于实现Swagger UI认证功能
- 补充缺失的命名空间引用
在启动类代码顶部,在现有已引用的命名空间基础上,额外添加using Microsoft.AspNetCore.Mvc;,AddControllers扩展方法就定义在这个命名空间下。 - 修正服务配置方法的命名
将当前写的ConfigurationServices方法名修改为*ConfigureServices*,ASP.NET Core的启动框架只会识别固定命名的服务注册方法,原方法名会导致框架跳过服务注册逻辑。 - 配置Swagger认证逻辑
在正确的ConfigureServices方法内,按顺序完成服务注册:public void ConfigureServices(IServiceCollection services) { // 注册控制器服务 services.AddControllers(); // 配置Newtonsoft.Json序列化(按需添加) services.AddControllers().AddNewtonsoftJson(); // 注册Swagger服务并配置认证规则 services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new() { Title = "API服务", Version = "v1" }); // 配置SwaggerUI的Bearer认证输入规则 c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Description = "输入带Bearer前缀的访问Token,格式示例:Bearer {你的token}", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey }); }); }
内容的提问来源于stack exchange,提问作者Mina Chan
相关产品推荐
相关产品推荐

