天天看点

ASP.NET Core SignalR CORS 跨域处理

一、ASP.NET Core SignalR CORS 跨域问题

默认情况下,配置SignalR 集线器不支持跨域处理。

在使用 SignalR 项目中处理跨域操作,方案如下:

1.启用signalR ,注册跨域方案

public void ConfigureServices(IServiceCollection services)
        {
            //设置跨域访问
            services.AddCors(options =>
            {
                //登录用户使用
                options.AddPolicy("any", builder =>
                {
                    builder.WithOrigins(
                        "http://crm.muzixiaohua.com/",
                        "http://localhost:64151",
                        "http://localhost:8080",
                        "http://localhost:8081",
                        "http://localhost:8082",
                        "null")
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials();
                });
                //公开使用
                options.AddPolicy("all", builder =>
                {
                    builder.WithOrigins("*")
                    .AllowAnyMethod()
                    .AllowAnyHeader();
                });
            });
            //注册signalr
            services.AddSignalR();
        }
           

2.使用跨域方案,监听集线器

public void Configure(IApplicationBuilder app, IHostingEnvironment env,
            IHttpContextAccessor accessor)
        {

            //注册signalr--指定跨域方案
            app.UseCors("any")
                .UseSignalR(route =>
                {
                    route.MapHub<App_Code.NoticeHub>("/ws_notice");
                });
            app.UseWebSockets();

            //方式处注册不支持跨域
            //app.UseSignalR(routes => routes.MapHub<App_Code.NoticeHub>("/ws_notice"));

        }
           

更多:

Asp.Net Core SignalR 分组使用示例

Asp.Net Core SignalR JavaScript客户端重新连接

HTML5 WebSocket+Asp.Net 实例四-用户标识,后台推送