SignalR Core 2.2 CORS AllowAnyOrigin()重大更改

时间:2018-12-14 21:16:00

标签: c# asp.net-core asp.net-core-signalr asp.net-core-2.2

要通过SignalR从任何来源连接到ASP.NET Core 2.1服务器,我们必须按以下方式配置管道:

app.UseCors (
  builder => builder
   .AllowAnyHeader ()
   .AllowAnyMethod ()
   .AllowAnyOrigin ()
   .AllowCredentials ()
)

根据this文档,ASP.NET Core 2.2不再允许AllowAnyOrigin和AllowCredentials的组合,那么解决方案是什么?而SignalR Core始终在XMLHtppRequest中发送withCredentials:true。

我需要的是,从任何来源开始,无需凭据,我们的用户就可以连接到SignalR集线器。

3 个答案:

答案 0 :(得分:5)

有一种解决方法,将AllowAnyOrigin更改为SetIsOriginAllowed

app.UseCors(builder => builder
                .AllowAnyHeader()
                .AllowAnyMethod()
                .SetIsOriginAllowed((host) => true)
                .AllowCredentials()
            );

答案 1 :(得分:0)

您可以使用“ WithOrigins”方法传递原点,也许可以通过配置读取。

app.UseCors(builder => builder
            .AllowAnyHeader()
            .AllowAnyMethod()
            .WithOrigins(new string[] { "www.example1.com", "www.example2.com" })
            .AllowCredentials()
        );

如果传递的唯一字符串是“ *”,则signalR仍然存在问题。如果您传递许多字符串,并且其中一个是“ *”,那么它将起作用。

答案 2 :(得分:0)

我找到了解决方案。您可以尝试以下代码部分:

.SetIsOriginAllowed (_ => true)

这对我有用。