ASP.NET Core全局启用CORS报CorsAuthorizationFilterFactory异常
错误原因
Microsoft.AspNetCore.Mvc.Cors.Internal.CorsAuthorizationFilterFactory 在 ASP.NET Core 6.0 中被修改为内部(internal)访问级别,不再作为公开类型对外暴露,直接手动实例化该类型就会触发TypeLoadException,该问题和是否安装Microsoft.AspNetCore.Mvc.CorsNuGet包没有直接关联。
解决方法
优先使用官方推荐的标准CORS配置流程,无需手动注册CORS过滤器
先通过AddCors方法注册CORS服务并配置对应策略,再通过中间件启用CORS即可,这是兼容性最好的实现方式:// 注册CORS服务并配置指定名称的策略 builder.Services.AddCors(options => { options.AddPolicy(policyName, policy => { // 按需配置策略规则:允许的源、请求头、请求方法等 policy.AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod(); }); }); builder.Services.AddMvc(); // 配置中间件管道时注意顺序:UseRouting之后、UseAuthorization/Map端点之前调用UseCors var app = builder.Build(); app.UseRouting(); // 启用指定策略,全局对所有请求生效 app.UseCors(policyName); app.UseAuthorization(); app.MapControllers();如果只需要对特定控制器、接口生效CORS策略,直接在对应控制器或Action方法上标注
[EnableCors(policyName)]特性即可。必须通过Mvc过滤器全局注册CORS时,使用官方提供的扩展方法替代直接实例化内部类型
不要手动newCorsAuthorizationFilterFactory,调用过滤器集合的AddCors扩展方法即可,框架内部会自动完成过滤器实例化,不会依赖非公开类型:serviceCollection.AddMvc(); serviceCollection.Configure<MvcOptions>(options => { // 引入Microsoft.AspNetCore.Mvc.Cors命名空间后可调用该扩展方法 options.Filters.AddCors(policyName); });升级项目场景下排查版本冲突问题
如果是从.NET 5及更低版本升级到.NET 6的项目,先清理本地的bin、obj文件夹,打开csproj文件检查所有Microsoft.AspNetCore.*相关包的版本,统一修改为6.0.x版本,避免旧版本包残留导致的类型加载异常。
内容的提问来源于stack exchange,提问作者Duany Baró Menéndez
相关产品推荐
相关产品推荐

