C# 信号机核心2.2 CORS AllowAnyOrigin()断路变化
要通过SignalR从任何来源连接到ASP.NET Core 2.1服务器,我们必须按如下方式配置管道: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的组合,那么解决方案是
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的问题不太清楚……因为他说信号员总是发送凭证,然后他不想要凭证……所以这听起来像是解决问题的另一种方法。谢谢,这是一个聪明的问题,回答也很聪明。