【问题标题】:The CORS error occurred on SignalR negotiation phase在 SignalR 协商阶段发生 CORS 错误
【发布时间】:2020-03-27 11:58:56
【问题描述】:

从 Asp.net core 2.2 迁移到 3.1 后,控制台出现以下错误

Access to XMLHttpRequest at 'someuri/negotiate?negotiateVersion=1' from 
origin 'http://localhost:4208' 
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested 
resource.

还有下面SignalR的配置:

app.UseCors(Constants.Policy);
app.UseAuthentication();

app.UseEndpoints(
          endpoints =>
          {
             endpoints.MapHub<SomeHub>("/ws/someuri");
          });

我已添加以下政策:

options.AddPolicy(Constants.Policy,
                    p => 
                        p.AllowAnyHeader()
                       .AllowAnyMethod()
                       .AllowCredentials()
                       .WithOrigins("http://localhost:4208"));

但这并没有帮助。

【问题讨论】:

    标签: asp.net signalr asp.net-core-3.1


    【解决方案1】:

    你应该这样配置CORS,顺序是重要的!

    关于你的配置方法:

    public override void Configure(IApplicationBuilder app, HostConfiguration hostConfiguration, ILogger<Startup> logger)
    {
        base.Configure(app, hostConfiguration, logger);
    
        app.UseWebSockets();
    
        app.UseCors(CorsPolicy); // first configure CORS, then map Hub
    
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapHub<SomeHub>("/someuri");
        });
    }
    

    那么在添加CORS的时候:

    /// <summary>
    /// Adds the CORS.
    /// </summary>
    private void AddCors(IServiceCollection services)
    {
        services.AddCors(options =>
        {
            options.AddPolicy(CorsPolicy, builder => builder.WithOrigins("http://localhost:4208")
                .AllowAnyHeader()
                .AllowAnyMethod()
                .AllowCredentials()
                .SetIsOriginAllowed((host) => true));
        });
    }
    

    你可以看到更详细的答案here

    【讨论】:

    • 谢谢,我会尝试,但我应该更新 Angular SignalR 包吗??
    • @VladislavFurdak 客户端软件包已从 @aspnet/signalr 迁移到 @microsoft/signalr,因此您应该将软件包升级到版本 3.1.3:npmjs.com/package/@microsoft/signalr
    • 然后从uri中删除ws
    • 另外请添加您如何连接到服务器的角度代码。
    • 如何在客户端传递令牌?你有授权属性吗?正如我之前所说,请添加您的客户端代码。
    猜你喜欢
    • 2016-06-05
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 2013-11-23
    • 2019-09-19
    • 2018-04-18
    • 2019-03-01
    相关资源
    最近更新 更多