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

.NET 7升级至.NET 8后出现CORS策略错误,需如何解决?

.NET 7升级至.NET 8后的CORS问题排查与解决

问题背景

项目从.NET 7升级到.NET 8后,出现CORS拦截错误,前端请求被浏览器阻止。

当前CORS服务配置

services.AddCors(options =>
{
    options.AddPolicy(name: "apiCorsPolicy",
    builder =>
    {           
          builder.SetIsOriginAllowed(origin => true);        
          builder.AllowAnyHeader().WithExposedHeaders("Content-Disposition");
          builder.AllowAnyMethod();
          builder.AllowCredentials();
    });
});

错误信息

Access to XMLHttpRequest at 'https://test.cp.in/api/Auth/authenticate' from origin 'https://cp.in' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

当前中间件配置

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
else
    app.UseHsts();

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseCors("apiCorsPolicy");

app.UseAuthentication();
app.UseAuthorization();
app.UseCookiePolicy();
app.MapControllers();

解决方案

针对.NET 8的特性,从以下几个方向调整配置:

  1. 优化CORS策略写法
    当同时使用AllowCredentials()和SetIsOriginAllowed(origin => true)时,.NET 8对响应头的处理逻辑有细微调整,建议将策略链式调用整合,避免拆分写法可能导致的配置失效:

    services.AddCors(options =>
    {
        options.AddPolicy("apiCorsPolicy", policy =>
        {
            policy.SetIsOriginAllowed(origin => true)
                  .AllowAnyHeader()
                  .WithExposedHeaders("Content-Disposition")
                  .AllowAnyMethod()
                  .AllowCredentials();
        });
    });
    
  2. 检查反向代理配置
    部署在Linux共享服务器上,大概率存在Nginx等反向代理,需要确保代理服务器不会篡改或丢弃CORS相关请求头。在Nginx配置中添加以下规则,保证Origin头正确传递到后端:

    proxy_set_header Origin $http_origin;
    proxy_pass_header Access-Control-Allow-Origin;
    
  3. 验证HSTS的影响
    生产环境启用的UseHsts可能和CORS响应头产生冲突,可临时注释app.UseHsts()测试是否解决问题,若有效则调整HSTS配置,允许CORS相关域名的访问规则。

  4. 排查预检请求拦截
    检查项目中是否存在自定义中间件提前拦截OPTIONS预检请求,.NET 8默认会自动处理OPTIONS请求,若有自定义逻辑终止OPTIONS请求,会直接导致CORS验证失败。

总结

优先排查反向代理的头传递问题,其次调整CORS策略的链式写法,确保配置逻辑在.NET 8中正常生效。若问题仍存在,可开启.NET的详细日志,查看CORS中间件的处理流程,定位具体的头缺失原因。

内容的提问来源于stack exchange,提问作者Lajith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:56:19