【问题标题】:Overriding global CORS policy with a different policy for signalR end point使用针对 signalR 端点的不同策略覆盖全局 CORS 策略
【发布时间】:2020-08-13 11:08:17
【问题描述】:

我有一个适用于所有端点的全局 CORS 策略,但我想为 signalR 集线器端点覆盖此策略。

这是我的 ConfigureServices 方法,它有一个我无法修改的全局 CORS 策略

    public void ConfigureServices(IServiceCollection services)
    {    
       // some piece of code before adding CORS

        services.AddCors(o =>
        {
            o.AddDefaultPolicy(p =>
            {
                p.AllowAnyOrigin()
                    .AllowAnyHeader()
                    .AllowAnyMethod();
            });
        });

        // some piece of code after adding CORS
    }

这里是配置方法

    public void Configure(IApplicationBuilder app, IServiceProvider serviceProvider)
    {
        app.UseCors();
        app.UseRouting();
        app.UseAuthentication();
        app.UseAuthorization();

        app.UseEndpoints(endPoints =>
        {
            endPoints.MapControllers();
            endPoints.MapHub<NotificationHub>("/notificationHub")
            .RequireCors((builder) =>
            {
                builder
                .WithOrigins(_configuration.GetValue<string>("Settings:ClientAppUrl"))
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials();
            });
        });
    }

很明显,我已经覆盖了 /notificationHub 信号的特定端点的 CORS 策略。

在为 /notificationHub/negotiate 添加 CORS 策略之前,我在浏览器中遇到了相同的 CORS 错误

对预检请求的响应未通过访问控制检查:响应中的“Access-Control-Allow->Credentials”标头的值为“”,当请求的凭据模式为>时必须为“true”包括'。 XMLHttpRequest 发起的请求的凭证模式由 >withCredentials 属性控制。

另外请注意,如果我在全局 CORS 策略中添加 AllowCredentials() 方法,那么 signalR 可以正常工作,但我的目标是仅为 signalR 端点添加新的 CORS 策略。

我没有使用 OWIN CORS,它只是 Microsoft.AspNetCore.Cors。

【问题讨论】:

    标签: c# asp.net-core cors signalr startup


    【解决方案1】:

    我已经找到了解决方法。它很简单,但经常被忽略。

    中间件的顺序在这里很重要。通过交换以下两个中间件,我得到了它的工作。

    app.UseCors();
    app.UseRouting();
    

    app.UseRouting();
    app.UseCors();
    

    如果有人遇到此问题,请尝试这样做。它肯定会奏效。

    来自 Microsoft 的 doc 支持此声明。

    【讨论】:

      猜你喜欢
      • 2019-11-16
      • 2021-12-19
      • 2011-05-11
      • 2011-06-19
      • 2021-06-05
      • 1970-01-01
      • 2021-11-16
      • 2018-02-05
      • 1970-01-01
      相关资源
      最近更新 更多