我有一个SignalR Asp.Net Core服务和一个ASP.Net Web应用程序,它们彼此通信。该Web应用程序托管在https://myproject-1234.something.com上,而信号器服务托管在:https://signalr.something.com:5007/
在我们迁移到Azure DevOps并移动发布了应用程序的服务器之前,它一直运转良好。
突然,我收到错误消息:CORS策略阻止了对来自“ https://myproject-1234.something.com”的“ https://signalr.something.com:5007/myHub/negotiate?parameterName=blabla”上的信号服务的托管,并且访问了“ https://localhost:44302”处的XMLHttpRequest :对预检请求的响应未通过访问控制检查:当请求的凭据模式为“包括”时,响应中“ Access-Control-Allow-Origin”标头的值不得为通配符“ *”。 XMLHttpRequest发起的请求的凭据模式由withCredentials属性控制。
这是服务的StartUp类中的代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
services.AddCors(o => o.AddPolicy("AllowAllPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
}));
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCors("AllowAllPolicy");
app.UseSignalR(routes => routes.MapHub<ImportSupplierHub>("/myHub"));
app.Run(async (context) =>
{
});
}
在Web应用程序的web.config中,我拥有:
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="NOSNIFF" />
<add name="X-Frame-Options" value="SAMEORIGIN" />
<add name="X-Permitted-Cross-Domain-Policies" value="master-only"/>
<add name="X-XSS-Protection" value="1; mode=block"/>
<remove name="X-Powered-By"/>
</customHeaders>
</httpProtocol>