.NetCore3.1下Signalr的跨域问题

        今天将公司的.net 下的Signarl项目移植到.netcore平台,安装微软的官方文档,一切都比较顺利,但是最后再跨域问题上碰到了一点坑,特此记录一下,也供有同样需要的朋友参考。

        在.net版本的Signalr下,跨域问题比较容易解决,代码如下:

class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.Map("/signalr", map =>
        {               
            map.UseCors(CorsOptions.AllowAll);               
            map.RunSignalR(hubConfiguration);
        });
            
        app.MapSignalR();
    }
}

        到了.netcore3.1中,需要按如下方法设置,首选在ConfigServices方法中:

       services.AddCors(op => { op.AddPolicy("cors", set => { set.SetIsOriginAllowed(origin => true).AllowAnyHeader().AllowAnyMethod().AllowCredentials(); }); });

        在Configure中,

  app.UseCors();

        这种做好后,实际测试对于Signalr的hub链接仍然存在跨域问题,经过研究,发现最关键的是一定要对hub进行跨域设置,代码如下:

    endpoints.MapHub<AgentCti>("/AgentCtiHub").RequireCors(t => t.WithOrigins(new string[] { "null" }).AllowAnyMethod().AllowAnyHeader().AllowCredentials());

      经过测试,跨域访问起效了,当然对于允许的访问域需要根据自己的实际情况进行配置。

上一篇:每天学一个jquery插件-做一个围棋3


下一篇:nginx signalR配置