为了账号安全,请及时绑定邮箱和手机立即绑定

更新到 .net core 2.2 后信号 r 不工作

更新到 .net core 2.2 后信号 r 不工作

C#
慕桂英3389331 2022-07-10 16:21:42
我们使用信号 r 来驱动我们的前端进行更新,它一直在 100% 工作,直到我们升级到 .net core 2.2请参阅下面的启动,这些方法确实被调用并且正常的后端调用可以正常工作,但是只要 Signal r 尝试从前端连接,我就会收到一个 cors 错误。我试图让所有通过cors,但这也没有用。protected IServiceProvider ConfigureServicesImplementation(IServiceCollection services)    {        services.Configure<DatabaseConfiguration>(Configuration.GetSection(DatabaseConfigurationName));        services.Configure<TokenProviderConfiguration>(Configuration.GetSection(TokenProviderConfigurationName));        services.AddOptions();        services.AddCors();        services.AddAutoMapper();        services.AddAutofac();        services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();        services.AddScoped<DatabaseMigrator>();        services.AddScoped<AdminTenantDbInitialiser>();        services.AddScoped<TenantDbInitialiser>();        services.AddScoped<HubBase>();        services.AddScoped<HubService>();        services.AddSignalR()        .AddJsonProtocol(options =>            {                options.PayloadSerializerSettings.Converters.Add(new StringEnumConverter                {                });            });至于从前端连接,请参见下面的代码。public startHubConnection(): void {    if (!this.hubConnection) {        const currentUser = this.authenticationService.getCurrentUser();        this.hubConnection = new HubConnectionBuilder().withUrl(this.url + '/globalhub?Authorization=Bearer ' + currentUser.accessToken).build();    }    this.hubConnection        .start()        .then(() => {            this.isHubConnected = true;            if (this.firstRun) {                this.firstRun = false;                this.manageHubConnections();            }
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

所以在 2.2 .AllowAnyOrigin() + .AllowCredentials() 不再被允许,因为它不安全。您需要使用 WithOrigins() 显式设置允许的来源。感谢 BrennanConroy 解决了问题

文章


查看完整回答
反对 回复 2022-07-10
?
湖上湖

TA贡献2003条经验 获得超2个赞

CORS 中间件必须位于应用程序中您想要支持跨域请求的任何已定义端点之前,因此您应该UseCors在之前调用UseSignalR:


...


app.UseCors(builder => builder

   .AllowAnyOrigin()

   .AllowAnyMethod()

   .AllowAnyHeader()

   .AllowCredentials());


app.UseSignalR(routes =>

{

    routes.MapHub<HubBase>("/globalhub");

});


...


查看完整回答
反对 回复 2022-07-10
  • 2 回答
  • 0 关注
  • 71 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信