SignalR 核心和跨域请求的问题
Posted
技术标签:
【中文标题】SignalR 核心和跨域请求的问题【英文标题】:Issue with SignalR core and cross domain requests 【发布时间】:2018-07-31 09:02:35 【问题描述】:我们将 SignalR 核心与 CORS 跨域请求一起使用。客户端无法连接到服务器。 401 Unauthorized No Access-Control-Allow-Origin' 标头出现在请求的资源上。错误:无法启动连接。请注意,我们使用的是最新的信号器核心(asp.net core 2.0 的 alpha 版本)。
请注意,在同一个客户端应用程序中,我可以访问 CORS Web API 方法。它与 SignalR 集线器/客户端隔离。
我们在 IIS 中使用 Windows 身份验证。匿名似乎正在工作。
服务器启动.cs:
ConfigureServices() 方法
services.AddCors();
services.AddSignalR();
配置方法
app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader().AllowCredentials());
app.UseSignalR(routes =>
routes.MapHub<TestHub>("test");
);
app.UseMvc();
javascript 客户端:
let connection = new signalR.HubConnection(CORS_WEB_API_URL + '/test');
connection.on('send', data =>
console.log(data);
);
connection.start();
请指教。
【问题讨论】:
请注意,在同一个客户端应用程序中,我可以访问 CORS Web API 方法。它与 SignalR 集线器/客户端隔离。 检查以确保您没有收到另一个错误。很多时候,错误响应(例如,如果是 401)将无法通过 CORS 检查,但根本原因不是 CORS 【参考方案1】:只需将 .AllowAnyOrigin() 替换为 .WithOrigins("*")
配置服务:
services.AddCors(options => options.AddPolicy("CorsPolicy", builder =>
builder
.AllowAnyMethod()
.AllowAnyHeader()
.WithOrigins("*")
.AllowCredentials();
));
配置
app.UseCors("CorsPolicy");
经过测试
<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.0.2" />
【讨论】:
【参考方案2】:我知道这是一篇旧帖子,但是,答案是使用 SignalR,您不能在 CORS 允许来源中使用通配符。
需要具体。对于开发,我使用这个:
services.AddCors(options => options.AddPolicy("CorsDev", builder =>
builder
.AllowAnyMethod()
.AllowAnyHeader()
.WithOrigins(AppSettings.SPAHost, "http://localhost:8099")
.AllowCredentials();
));
然后在startup.cs中的Configure中
app.UseCors("CorsDev");
希望这对某人有所帮助。
【讨论】:
以上是关于SignalR 核心和跨域请求的问题的主要内容,如果未能解决你的问题,请参考以下文章