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

.NET 6部署Azure后CORS报错:无Access-Control-Allow-Origin响应头

Azure部署后API遭遇CORS拦截问题排查与解决

问题详情

报错信息:

Access to fetch at '{mybaseurlapi}/api/Comptes/Connexion' from origin '{mybaseurlclient}' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

API的Program.cs配置:

...

builder.Services.AddCors(o => o.AddPolicy("Epicerie", builder =>
{
    builder
        .WithOrigins("https://epicerieclient20231122200526.azurewebsites.net")
        .AllowAnyMethod()
        .AllowAnyHeader()
        .AllowCredentials();
}));

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseCors("Epicerie");
app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

app.Run();

已尝试的无效操作:

  • 将app.UseCors("Epicerie")移至UseRouting之后
  • 使用[EnableCors("Epicerie")]替代全局中间件
  • 配置允许任意来源的CORS策略:AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()

解决方案

1. 检查Azure App Service层面的CORS配置

Azure App Service自带的CORS配置会覆盖代码中的设置,这是部署后CORS失效的常见原因:

  • 登录Azure门户,找到你的API对应的App Service
  • 进入左侧菜单的「CORS」选项
  • 确认是否已添加客户端的完整域名(包括https://前缀,无末尾斜杠),测试阶段可临时勾选「允许所有来源」验证
  • 若此处配置了规则,代码中的CORS策略会被忽略,需保持两边配置一致或统一使用App Service的CORS设置

2. 修正中间件执行顺序

ASP.NET Core中间件顺序严格决定执行逻辑,正确的CORS中间件位置必须满足:

app.UseHttpsRedirection();
app.UseRouting();
// CORS必须在UseRouting之后,UseAuthentication/UseAuthorization之前
app.UseCors("Epicerie"); 
app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

之前的代码中UseCors在UseRouting之前,会导致CORS头无法正确添加到路由匹配后的请求中。

3. 排查重定向导致的CORS头丢失

如果API存在重定向(比如Azure App Service强制HTTPS但配置冲突),重定向后的响应可能丢失CORS头:

  • 使用浏览器开发者工具的「网络」标签,查看请求的状态码,若出现3xx重定向,检查目标地址是否正确
  • 确保UseHttpsRedirection()配置正确,且Azure App Service的「TLS/SSL设置」中已开启「HTTPS only」

4. 验证Credentials请求的兼容性

如果客户端请求使用了credentials: 'include'(如携带Cookie、认证令牌):

  • 不能使用AllowAnyOrigin(),必须明确指定WithOrigins包含客户端域名
  • 确保策略中开启AllowCredentials()
  • 客户端域名必须与配置完全一致(大小写、协议、端口都要匹配,无末尾斜杠)

5. 排查自定义中间件或过滤器的干扰

检查是否存在自定义中间件(如异常处理、日志中间件)在CORS中间件之前返回响应,导致CORS头未被添加:

  • 暂时注释非必要的自定义中间件,测试CORS是否正常
  • 确认全局过滤器没有修改或移除响应头

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:18:37