关于SignalR和网络应用之间的通信的CORS问题

时间:2019-03-05 09:38:27

标签: asp.net-core cors asp.net-core-mvc signalr

我有一个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>

0 个答案:

没有答案