我们正在使用SignalR核心和CORS跨域请求。客户端无法连接到服务器。 401 Unauthorized No Access-Control-Allow-Origin'标头出现在请求的资源上。错误:无法启动连接。请注意,我们使用的是最新的信号器核心(asp.net core 2.0的alpha版本)。
请注意在同一客户端应用程序中,我可以访问CORS Web API方法。它与SignalR集线器/客户端隔离。
我们在IIS中使用Windows身份验证。匿名似乎正在发挥作用。
服务器startup.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();
请告知。
答案 0 :(得分:0)
只需将.AllowAnyOrigin()替换为.WithOrigins(“ *”)
ConfigureServices:
services.AddCors(options => options.AddPolicy("CorsPolicy", builder =>
{
builder
.AllowAnyMethod()
.AllowAnyHeader()
.WithOrigins("*")
.AllowCredentials();
}));
配置
app.UseCors("CorsPolicy");
经过
测试<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.0.2" />
答案 1 :(得分:0)
我知道这是一篇过时的文章,但是答案是,使用SignalR时,您不能在CORS允许来源中使用通配符。
需要具体。对于开发,我使用以下方法:
services.AddCors(options => options.AddPolicy("CorsDev", builder =>
{
builder
.AllowAnyMethod()
.AllowAnyHeader()
.WithOrigins(AppSettings.SPAHost, "http://localhost:8099")
.AllowCredentials();
}));
然后在startup.cs中的“配置”中
app.UseCors(“ CorsDev”);
希望这对某人有帮助。