SignalR Core 2.2 CORS AllowAnyOrigin() 重大变更
SignalR Core 2.2 CORS AllowAnyOrigin() breaking change
要通过 SignalR 从任何来源连接到 ASP.NET Core 2.1 服务器,我们必须按如下方式配置管道:
app.UseCors (
builder => builder
.AllowAnyHeader ()
.AllowAnyMethod ()
.AllowAnyOrigin ()
.AllowCredentials ()
)
根据this文档,ASP.NETCore 2.2不再允许AllowAnyOrigin和AllowCredentials的组合,那么解决方案是什么?而 SignalR Core 总是在 XMLHtppRequest 中发送 withCredentials:true。
我需要的是,我们的用户可以从任何来源且无需凭据连接到 SignalR Hub。
有一个解决方法,将 AllowAnyOrigin
更改为 SetIsOriginAllowed
:
app.UseCors(builder => builder
.AllowAnyHeader()
.AllowAnyMethod()
.SetIsOriginAllowed(_ => true)
.AllowCredentials()
);
您可以使用 "WithOrigins" 方法传递来源,也许通过配置读取。
app.UseCors(builder => builder
.AllowAnyHeader()
.AllowAnyMethod()
.WithOrigins(new string[] { "www.example1.com", "www.example2.com" })
.AllowCredentials()
);
如果传递的唯一字符串是“*”,则 signalR 仍然存在问题。如果你传递了很多字符串,其中一个是“*”,它就有效。
我找到了解决办法。您可以尝试以下代码部分:
.SetIsOriginAllowed (_ => true)
这对我有用。
要通过 SignalR 从任何来源连接到 ASP.NET Core 2.1 服务器,我们必须按如下方式配置管道:
app.UseCors (
builder => builder
.AllowAnyHeader ()
.AllowAnyMethod ()
.AllowAnyOrigin ()
.AllowCredentials ()
)
根据this文档,ASP.NETCore 2.2不再允许AllowAnyOrigin和AllowCredentials的组合,那么解决方案是什么?而 SignalR Core 总是在 XMLHtppRequest 中发送 withCredentials:true。
我需要的是,我们的用户可以从任何来源且无需凭据连接到 SignalR Hub。
有一个解决方法,将 AllowAnyOrigin
更改为 SetIsOriginAllowed
:
app.UseCors(builder => builder
.AllowAnyHeader()
.AllowAnyMethod()
.SetIsOriginAllowed(_ => true)
.AllowCredentials()
);
您可以使用 "WithOrigins" 方法传递来源,也许通过配置读取。
app.UseCors(builder => builder
.AllowAnyHeader()
.AllowAnyMethod()
.WithOrigins(new string[] { "www.example1.com", "www.example2.com" })
.AllowCredentials()
);
如果传递的唯一字符串是“*”,则 signalR 仍然存在问题。如果你传递了很多字符串,其中一个是“*”,它就有效。
我找到了解决办法。您可以尝试以下代码部分:
.SetIsOriginAllowed (_ => true)
这对我有用。