我在协商阶段遇到SignalR问题,在协商阶段,我从reactjs站点调用到.net核心signalR集线器,错误是CORS标头不存在,我启动了CORS,因为整个站点在另一台服务器上调用后端,所有调用均正常进行。
这是我得到的错误:
对预检请求的响应未通过访问控制检查:所请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不允许访问来源“ http://localhost:8080”。
这是客户端代码:
SignalR() {
const connection = new signalR.HubConnectionBuilder()
.withUrl(process.env.API_URL + "/HealthMonitorHub", options => {
options.UseDefaultCredentials = true;
})
.build();
connection
.start()
.then(() => console.log('Connection started!'))
.catch(err => console.log('Error while establishing connection => ' + err));
}
这是服务器端网络核心启动:
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
{
builder.AllowAnyMethod()
.AllowAnyHeader()
.WithOrigins("*")
.AllowCredentials();
}));
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new CorsAuthorizationFilterFactory("CorsPolicy"));
});
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors("CorsPolicy");
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
else
app.UseExceptionHandler("/error");
app.UseSignalR(route =>
{
route.MapHub<HealthMonitorHub>("/HealthMonitorHub");
});
app.UseMvc();
}
我知道CORS的配置很好,我不知道在React方面是否缺少某些东西,我在双方都使用相同的版本1.0.3和Net Core 2.1.402。
有什么想法吗?
谢谢
答案 0 :(得分:0)
在Configure方法中尝试以下操作:
app.UseCors(builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader().AllowCredentials());
代替
app.UseCors("CorsPolicy");