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

访问Azure App Service托管的SignalR Hub时遭遇CORS错误如何解决?

问题描述

我有一个部署在Azure App Service上的.NET Core WebAPI,集成了SignalR Hub。客户端托管在Azure Static Web App,调用后端服务和Hub的SSL通信一切正常,但客户端尝试与SignalR Hub建立连接时触发CORS错误:

从源'https://client-app.5.azurestaticapps.net'访问'https://backend-service.azurewebsites.net/hub/shop/negotiate?negotiateVersion=1'时被CORS策略阻止:预检请求的响应未通过访问控制检查:响应中的'Access-Control-Allow-Credentials'标头值为'',而当请求的凭据模式为'include'时必须为'true'。

(Chrome错误截图:Chrome Error)

该服务此前运行状态良好,未对任何内容进行修改的情况下突然出现此错误。

解决方案

1. 修正.NET Core代码中的CORS策略

确保在Program.cs(.NET 6+)或Startup.cs中配置的CORS策略包含AllowCredentials(),并明确指定客户端源:

// .NET 6+ 示例代码
builder.Services.AddCors(options =>
{
    options.AddPolicy("SignalRCorsPolicy", policy =>
    {
        policy.WithOrigins("https://client-app.5.azurestaticapps.net")
              .AllowAnyHeader()
              .AllowAnyMethod()
              .AllowCredentials(); // 必须添加此配置,对应允许凭据
    });
});

// 注意中间件顺序:UseCors要放在UseRouting之后,UseEndpoints之前
app.UseCors("SignalRCorsPolicy");

app.MapHub<ShopHub>("/hub/shop");

2. 检查Azure App Service门户的CORS配置

Azure App Service的门户CORS设置会覆盖代码中的配置,需确认:

  • 在App Service控制台的配置 > CORS页面,已将https://client-app.5.azurestaticapps.net添加到允许的源列表
  • 勾选启用凭据选项(此选项控制Access-Control-Allow-Credentials标头为true)

若之前未勾选,可能是Azure后台配置自动变更导致问题,勾选后保存并重启App Service。

3. 验证SignalR客户端连接配置

确认客户端连接时设置了正确的凭据模式,避免不匹配:

// JavaScript客户端示例
const connection = new signalR.HubConnectionBuilder()
    .withUrl("https://backend-service.azurewebsites.net/hub/shop", {
        withCredentials: true // 此设置会触发请求凭据模式为include,后端必须允许
    })
    .build();

4. 排查Azure平台自动更新的影响

Azure App Service可能自动升级.NET Core运行时或平台组件,导致CORS行为变化:

  • 重启App Service实例,排除临时配置异常
  • 在配置 > 常规设置中检查.NET Core版本,若有自动升级,可尝试回滚到之前的稳定版本测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:57:33