在我的项目中,negotiate
、connect
和start
API调用都包含所需的access-control-allow-origin
头。然而,一旦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.
我已经根据微软的文档修改了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错误仍然存在。知道这里出了什么问题吗?
我在用微软。AspNet。SignalR 2.4.2和Microsoft。Owin。Cors 4.2.0 with。NET Framework 4.8。
我也不明白,为什么它在URL中调用/signar/signer。
您应该像那样配置CORS(订单很重要(:
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy", builder => builder.WithOrigins(YourOriginsHere)
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.SetIsOriginAllowed((host) => true));
});
注意:避免将
*
放在原点中,最好创建一个具有可能原点的字符串数组,最好是从配置中读取。
更新:For。NET Framework查看如何从本Microsoft文档中启用CORS。
实际问题是我使用的客户端库中的一个错误。解决方案是更新我的客户端npm包signalr-asp-net
。我仍然有1.0.0版本,并更新到1.0.3。现在问题已经解决了。