在 SignalR 协商阶段发生 CORS 错误
Posted
技术标签:
【中文标题】在 SignalR 协商阶段发生 CORS 错误【英文标题】:The CORS error occurred on SignalR negotiation phase 【发布时间】:2020-03-27 11:58:56 【问题描述】:从 Asp.net core 2.2 迁移到 3.1 后,控制台出现以下错误
Access to XMLHttpRequest at 'someuri/negotiate?negotiateVersion=1' from
origin 'http://localhost:4208'
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested
resource.
还有下面SignalR
的配置:
app.UseCors(Constants.Policy);
app.UseAuthentication();
app.UseEndpoints(
endpoints =>
endpoints.MapHub<SomeHub>("/ws/someuri");
);
我已添加以下政策:
options.AddPolicy(Constants.Policy,
p =>
p.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.WithOrigins("http://localhost:4208"));
但这并没有帮助。
【问题讨论】:
【参考方案1】:你应该这样配置CORS
,顺序是重要的!
关于你的配置方法:
public override void Configure(IApplicationBuilder app, HostConfiguration hostConfiguration, ILogger<Startup> logger)
base.Configure(app, hostConfiguration, logger);
app.UseWebSockets();
app.UseCors(CorsPolicy); // first configure CORS, then map Hub
app.UseEndpoints(endpoints =>
endpoints.MapHub<SomeHub>("/someuri");
);
那么在添加CORS的时候:
/// <summary>
/// Adds the CORS.
/// </summary>
private void AddCors(IServiceCollection services)
services.AddCors(options =>
options.AddPolicy(CorsPolicy, builder => builder.WithOrigins("http://localhost:4208")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.SetIsOriginAllowed((host) => true));
);
你可以看到更详细的答案here。
【讨论】:
谢谢,我会尝试,但我应该更新 Angular SignalR 包吗?? @VladislavFurdak 客户端软件包已从@aspnet/signalr
迁移到 @microsoft/signalr
,因此您应该将软件包升级到版本 3.1.3:npmjs.com/package/@microsoft/signalr
然后从uri中删除ws
。
另外请添加您如何连接到服务器的角度代码。
如何在客户端传递令牌?你有授权属性吗?正如我之前所说,请添加您的客户端代码。以上是关于在 SignalR 协商阶段发生 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章
在角度应用程序中使用 SignalR Core 时出现 CORS 错误