如何为 ASPNETCore 2.1 应用程序配置 SignalR Cors?
Posted
技术标签:
【中文标题】如何为 ASPNETCore 2.1 应用程序配置 SignalR Cors?【英文标题】:How can SignalR Cors be configured for an ASPNETCore 2.1 application? 【发布时间】:2019-01-19 15:50:44 【问题描述】:我正在尝试为我的 aspnetcore 2.1 应用程序配置 CORS。我已密切关注文档。我的启动文件配置如下。
public void ConfigureServices(IServiceCollection services)
services.AddCors(options => options
.AddPolicy("CorsPolicy", builder =>
builder.WithOrigins("http://sitetracker")
.AllowAnyHeader();
));
services.AddMvc();
services.AddSignalR(o => o.EnableDetailedErrors = true);
services.AddDbContext<BiometricContext>();
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseCors("CorsPolicy");
app.UseSignalR(routes =>
routes.MapHub<BiometricsHub<User>>("/biometricshub");
);
app.UseMvc();
我配置了 Angular 项目以启动集线器连接并等待服务器将一些信息推送到客户端。
var port = 58422;
this.connection = new HubConnectionBuilder()
.withUrl(`http://localhost:$port/BiometricsHub`)
.configureLogging(LogLevel.Information)
.build();
this.connection.on("ReceiveActiveIdentities", (identities) =>
debugger // Waiting here to receive data
);
this.connection.start().catch(err =>
debugger // Error is "Error" with and error code of 0
console.error(err.toString());
);
调用connection.start时出错。
由于我无法弄清楚发生 cors 错误的原因,我想知道代码是否以其他方式损坏。我通过在运行菜单中执行以下行来禁用浏览器会话中的 cors 安全性。
chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security
一旦 CORS 被禁用,代码将按预期在我的客户端回调中返回数据。这让我相信我的 CORS 配置之外的一切都是正确的。
我的配置中缺少什么?我仍然无法让它工作。
【问题讨论】:
【参考方案1】:我以为我以前在我的许多配置中都尝试过这个。然而,情况似乎并非如此。也许当时 app.UseCors() 跟随 app.UseMvc 这显然是一个禁忌。
builder.WithOrigins("http://sitetracker")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
它允许的以下三个需要到位或更受限制的版本,以便根据需要执行您的特定操作或方法。
【讨论】:
以上是关于如何为 ASPNETCore 2.1 应用程序配置 SignalR Cors?的主要内容,如果未能解决你的问题,请参考以下文章
AspNetCore 2.1 Bearer Token Authentication - 当前用户为空
将 httpHandler 附加到 httpclientFactory webapi aspnetcore 2.1
DB First,ASP Net Core 2.1,EF6:InvalidOperationException:在应用程序配置文件中找不到名为“DataContext”的连接字符串
.Net IDE智能提示汉化(.Net6AspNetCore)