今天将公司的.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());
经过测试,跨域访问起效了,当然对于允许的访问域需要根据自己的实际情况进行配置。