我正在尝试从blazor Webassembly客户端连接到SignalR服务,但是我认为这在CORS上失败。这是我的剃须刀文件中的代码。
m_connection = new HubConnectionBuilder()
.WithUrl(url, options =>
{
options.AccessTokenProvider = () => Task.FromResult(userService.Token);
})
.WithAutomaticReconnect()
.Build();
await m_connection.StartAsync();
然后在webassembly日志中,我看到以下错误:
无法从来源'http://localhost:5010'处获取'xxxx / negotiate?negotiateVersion = 1'处的访存,已被CORS策略阻止:对预检请求的响应未通过访问控制检查:否'Access-Control-Allow -Origin'标头出现在请求的资源上。如果不透明的响应满足您的需求,请将请求的模式设置为“ no-cors”,以在禁用CORS的情况下获取资源。
我在Blazor服务器配置中添加了以下CORS策略:
app.UseResponseCompression();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBlazorDebugging();
}
else
{
app.UseExceptionHandler(@"/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseAuthorization();
app.UseCors(policy => policy
.WithOrigins("http://localhost:5010")
.AllowAnyHeader()
.AllowAnyMethod());
app.UseClientSideBlazorFiles<Client.Program>();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapFallbackToClientSideBlazor<Client.Program>(@"index.html");
});
任何人都知道什么地方可能出问题了?
尝试以下过程:
1。
Install-Package Microsoft.AspNetCore.Cors -Version 2.2.0
2。
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
});
.....
}
3。
public void Configure(IApplicationBuilder app,
IHostingEnvironment env)
{
app.UseCors("CorsPolicy");
}
希望这有帮助...