天天看點

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 執行個體四-使用者辨別,背景推送