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

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时,使用官方提供的扩展方法替代直接实例化内部类型
    不要手动new CorsAuthorizationFilterFactory,调用过滤器集合的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:39:27