对预检请求的响应未通过访问控制检查:响应中的"Access-Control-Allow-Credentials"标头的值为''

San*_*isy 0 c# asp.net-core angular asp.net-core-signalr

我,我正在使用angular 6和asp.net核心上的SignalR功能.但不断收到此错误对预检请求的响应未通过访问控制检查:响应中的"Access-Control-Allow-Credentials"标头的值为'',当请求的凭据模式为'时,该值必须为'true'包括'.

做了一些研究,发现它是服务器端的CORS问题.所以修改了服务器代码.

startup.cs

public void ConfigureServices(IServiceCollection services)
        {
    services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
                {
                    builder.AllowAnyOrigin()
                           .AllowAnyMethod()
                           .AllowAnyHeader()
                           .WithOrigins("http://localhost:4200");
                }));
     services.AddSignalR();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
         app.UseCors("CorsPolicy");
         app.UseSignalR(routes =>
            {
                routes.MapHub<SignalR>("/rule");
            });
}
Run Code Online (Sandbox Code Playgroud)

角应用

ngOnInit() {
this.callSignalR()
}

    private callSignalR(): void {
        // set up the signal R
        let connection = new signalR.HubConnectionBuilder().withUrl(environment.baseUrl+"/rule").build();
        //start the connection 
        connection.start().then(() => connection.invoke("updateRules", this.autheService.getCurrentuser.userId));
        //Get the response from the server
        connection.on("updateRules", data => {console.log(data);}); 
      }
Run Code Online (Sandbox Code Playgroud)

引用

Access-Control-Allow-Origin - Angular 5

响应中的"Access-Control-Allow-Credentials"标题为"必须为'true'

https://github.com/aspnet/SignalR/issues/2095

https://github.com/SignalR/SignalR/issues/1694

https://github.com/aspnet/SignalR/issues/2110

als*_*ami 5

您必须允许您的cors-policy凭据,因为signalr也会传递Cookie.

public void ConfigureServices(IServiceCollection services)
        {
    services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
                {
                    builder.AllowAnyOrigin()
                           .AllowAnyMethod()
                           .AllowAnyHeader()
                           .AllowCredentials()
                           .WithOrigins("http://localhost:4200");
                }));
     services.AddSignalR();
}
Run Code Online (Sandbox Code Playgroud)

  • 这就是我所缺少的,谢谢! (2认同)