SignalR ping 失败并出现 CORS Access-Control-Allow-Origin 错误
SignalR ping fails with CORS Access-Control-Allow-Origin error
在我的项目中,negotiate
、connect
和 start
API 调用都包含所需的 access-control-allow-origin
header。但是,一旦 SignalR 调用 ping
方法,它就会抛出以下错误:
Access to XMLHttpRequest at 'https://backend.url/signalr/signalr/ping&_=1643292246714'
from origin 'https://frontend.url' has been blocked by CORS policy:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
我已经根据 Microsoft 的文档修改了我的 Startup.cs 文件。我是旧版本,我使用的是 MapSignalR
方法。
public class Startup {
public void Configuration(IAppBuilder app) {
// Branch the pipeline here for requests that start with "/signalr"
app.Map("/signalr", map =>
{
// Setup the CORS middleware to run before SignalR. By default this will allow all origins.
map.UseCors(CorsOptions.AllowAll);
map.RunSignalR();
});
app.UseCors(CorsOptions.AllowAll);
}
}
但是,此更改没有任何效果。 CORS 错误仍然存在。知道这里出了什么问题吗?
我在 .NET Framework 4.8 中使用 Microsoft.AspNet.SignalR 2.4.2 和 Microsoft.Owin.Cors 4.2.0。
我也不明白,为什么在URL中调用/signalr/signalr。
您应该像这样配置您的 CORS (顺序很重要):
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy", builder => builder.WithOrigins(YourOriginsHere)
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.SetIsOriginAllowed((host) => true));
});
Note: Avoid putting *
in the origins, it is better to create an array of strings with the possible origins, ideally reading it from configuration.
更新:对于 .NET Framework,请查看如何从此 Microsoft documentation.
启用 CORS
实际问题是我使用的客户端库中的错误。解决方案是更新我的 client-side npm 包 signalr-asp-net
。我还有 1.0.0 版本并更新到 1.0.3。现在问题解决了。
在我的项目中,negotiate
、connect
和 start
API 调用都包含所需的 access-control-allow-origin
header。但是,一旦 SignalR 调用 ping
方法,它就会抛出以下错误:
Access to XMLHttpRequest at 'https://backend.url/signalr/signalr/ping&_=1643292246714'
from origin 'https://frontend.url' has been blocked by CORS policy:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
我已经根据 Microsoft 的文档修改了我的 Startup.cs 文件。我是旧版本,我使用的是 MapSignalR
方法。
public class Startup {
public void Configuration(IAppBuilder app) {
// Branch the pipeline here for requests that start with "/signalr"
app.Map("/signalr", map =>
{
// Setup the CORS middleware to run before SignalR. By default this will allow all origins.
map.UseCors(CorsOptions.AllowAll);
map.RunSignalR();
});
app.UseCors(CorsOptions.AllowAll);
}
}
但是,此更改没有任何效果。 CORS 错误仍然存在。知道这里出了什么问题吗?
我在 .NET Framework 4.8 中使用 Microsoft.AspNet.SignalR 2.4.2 和 Microsoft.Owin.Cors 4.2.0。
我也不明白,为什么在URL中调用/signalr/signalr。
您应该像这样配置您的 CORS (顺序很重要):
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy", builder => builder.WithOrigins(YourOriginsHere)
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.SetIsOriginAllowed((host) => true));
});
Note: Avoid putting
*
in the origins, it is better to create an array of strings with the possible origins, ideally reading it from configuration.
更新:对于 .NET Framework,请查看如何从此 Microsoft documentation.
启用 CORS实际问题是我使用的客户端库中的错误。解决方案是更新我的 client-side npm 包 signalr-asp-net
。我还有 1.0.0 版本并更新到 1.0.3。现在问题解决了。