C# 信号机核心2.2 CORS AllowAnyOrigin()断路变化

C# 信号机核心2.2 CORS AllowAnyOrigin()断路变化,c#,asp.net-core,asp.net-core-signalr,asp.net-core-2.2,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 () ) 根据该文档,ASP.NET Core 2.2不再允许AllowYorigin和AllowCredentials的组合,那么解决方案是

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

app.UseCors (
  builder => builder
   .AllowAnyHeader ()
   .AllowAnyMethod ()
   .AllowAnyOrigin ()
   .AllowCredentials ()
)
根据该文档,ASP.NET Core 2.2不再允许AllowYorigin和AllowCredentials的组合,那么解决方案是什么呢?而SignalR Core总是在XMLHtpRequest中发送凭证:true


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

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

app.UseCors(builder => builder
                .AllowAnyHeader()
                .AllowAnyMethod()
                .SetIsOriginAllowed(_ => true)
                .AllowCredentials()
            );
您可以使用“WithOriginates”方法传递原点,也可以通过配置读取

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

如果传递的唯一字符串是“*”,那么signalR仍然存在问题。如果您传递了许多字符串,其中一个是“*”,它就可以工作。

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

.SetIsOriginAllowed (_ => true)

这对我来说很有效。

你的网站链接似乎有一些步骤可以解决这个问题。这些步骤对您无效吗?来自文档:“修改CORS策略以不再允许凭据。也就是说,在配置策略时删除对AllowCredentials的调用”。信号器没有禁用withcredentials属性的选项,因此,没有链接没有帮助。为什么要投反对票?Alexandre已经发布了一个有效的解决方案。作者问“我需要的是来自任何来源并且没有证书的”,所以你的回答是不正确的。我认为你的意图是告诉人们,有另一种方法可以宣布具体的起源,但是你应该发表这样的评论。@NePheus op的问题不太清楚……因为他说信号员总是发送凭证,然后他不想要凭证……所以这听起来像是解决问题的另一种方法。谢谢,这是一个聪明的问题,回答也很聪明。