如何为ASPNETCore 2.1应用程序配置SignalR Cors?

时间:2018-08-12 22:45:02

标签: model-view-controller asp.net-core cors signalr

我正在尝试为aspnetcore 2.1应用程序配置CORS。我密切关注了文档。我的启动文件已配置如下。

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options => options
            .AddPolicy("CorsPolicy", builder =>
            {
                builder.WithOrigins("http://sitetracker")
                    .AllowAnyHeader();
            }));

        services.AddMvc();
        services.AddSignalR(o => o.EnableDetailedErrors = true);
        services.AddDbContext<BiometricContext>();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseCors("CorsPolicy");

        app.UseSignalR(routes =>
        {
            routes.MapHub<BiometricsHub<User>>("/biometricshub");
        });
        app.UseMvc();
    }

我配置了angular项目来启动集线器连接,然后在服务器上等待将一些信息推送到客户端。

    var port = 58422;
    this.connection = new HubConnectionBuilder()
        .withUrl(`http://localhost:${port}/BiometricsHub`)
        .configureLogging(LogLevel.Information)
        .build();

    this.connection.on("ReceiveActiveIdentities", (identities) => {
        debugger // Waiting here to receive data
    });

    this.connection.start().catch(err => {
        debugger // Error is "Error" with and error code of 0
        console.error(err.toString());
    });

调用connection.start时引起错误。

enter image description here

由于我无法弄清楚为什么发生cors错误,所以我想知道代码是否以其他方式被破坏了。我通过在运行菜单中执行以下行来禁用浏览器会话中的cors安全性。

chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security

一旦CORS被禁用,代码将按预期返回我的客户端回调中的数据。这使我相信CORS配置之外的所有内容都是正确的。

我的配置中缺少什么?我仍然无法使它正常工作。

1 个答案:

答案 0 :(得分:1)

我认为我以前在许多配置中都尝试过此操作。但是,似乎并非如此。也许当时app.UseCors()跟在app.UseMvc之后,这显然是不行的。

builder.WithOrigins("http://sitetracker")
   .AllowAnyHeader()
   .AllowAnyMethod()
   .AllowCredentials();

下面的三个允许存在的位置或更多受限制的版本,这些版本允许您根据需要执行特定的操作或方法。