SignalR核心和跨域请求的问题

时间:2018-02-20 21:48:15

标签: asp.net-core cors asp.net-core-2.0 unauthorized asp.net-core-signalr

我们正在使用SignalR核心和CORS跨域请求。客户端无法连接到服务器。 401 Unauthorized No Access-Control-Allow-Origin'标头出现在请求的资源上。错误:无法启动连接。请注意,我们使用的是最新的信号器核心(asp.net core 2.0的alpha版本)。

请注意在同一客户端应用程序中,我可以访问CORS Web API方法。它与SignalR集线器/客户端隔离。

我们在IIS中使用Windows身份验证。匿名似乎正在发挥作用。

服务器startup.cs:

ConfigureServices()方法

services.AddCors();
services.AddSignalR();

配置方法

app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader().AllowCredentials());
app.UseSignalR(routes =>
            {
                routes.MapHub<TestHub>("test");
            });
app.UseMvc();

javascript客户端:

let connection = new signalR.HubConnection(CORS_WEB_API_URL + '/test');
    connection.on('send', data => {
        console.log(data);
    });
connection.start();

请告知。

2 个答案:

答案 0 :(得分:0)

只需将.AllowAnyOrigin()替换为.WithOrigins(“ *”)

ConfigureServices:

services.AddCors(options => options.AddPolicy("CorsPolicy", builder =>
{
     builder
        .AllowAnyMethod()
        .AllowAnyHeader()
        .WithOrigins("*")
        .AllowCredentials();
}));

配置

app.UseCors("CorsPolicy");

经过

测试
<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.0.2" />

答案 1 :(得分:0)

我知道这是一篇过时的文章,但是答案是,使用SignalR时,您不能在CORS允许来源中使用通配符。

需要具体。对于开发,我使用以下方法:

        services.AddCors(options => options.AddPolicy("CorsDev", builder =>
        {
            builder
            .AllowAnyMethod()
            .AllowAnyHeader()
            .WithOrigins(AppSettings.SPAHost, "http://localhost:8099")
            .AllowCredentials();
        }));

然后在startup.cs中的“配置”中

app.UseCors(“ CorsDev”);

希望这对某人有帮助。