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

Posted

技术标签:

【中文标题】如何为 ASPNETCore 2.1 应用程序配置 SignalR Cors?【英文标题】:How can SignalR Cors be configured for an ASPNETCore 2.1 application? 【发布时间】:2019-01-19 15:50:44 【问题描述】:

我正在尝试为我的 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时出错。

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

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

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

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

【问题讨论】:

【参考方案1】:

我以为我以前在我的许多配置中都尝试过这个。然而,情况似乎并非如此。也许当时 app.UseCors() 跟随 app.UseMvc 这显然是一个禁忌。

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

它允许的以下三个需要到位或更受限制的版本,以便根据需要执行您的特定操作或方法。

【讨论】:

以上是关于如何为 ASPNETCore 2.1 应用程序配置 SignalR Cors?的主要内容,如果未能解决你的问题,请参考以下文章

AspNetCore 2.1 Bearer Token Authentication - 当前用户为空

将 httpHandler 附加到 httpclientFactory webapi aspnetcore 2.1

DB First,ASP Net Core 2.1,EF6:InvalidOperationException:在应用程序配置文件中找不到名为“DataContext”的连接字符串

.Net IDE智能提示汉化(.Net6AspNetCore)

如何为 wordpress 添加 ELB 并启用 https

如何为 Spring Boot 应用程序配置端口