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