【问题标题】:Signal R - OnDisconnectedAsync(Exception? exception) Function is Not working信号 R - OnDisconnectedAsync(异常?异常)函数不工作
【发布时间】:2022-01-11 00:11:59
【问题描述】:

我正在使用 blazor web assemblly 在网络上开发一个聊天应用程序

我正在尝试将用户的状态(在线/离线)相互推送。

这里是信号RHub

连接后工作正常。

公共覆盖任务 OnConnectedAsync()

我的问题是 OnDisconnectedAsync() 根本没有被调试器击中

即使我关闭了与服务器连接的客户端(浏览器)。

    public override Task OnDisconnectedAsync(Exception? exception)
    {
        var userId = _userManager.GetUserId(Context.User);


        return base.OnDisconnectedAsync(exception);
    }

【问题讨论】:

  • 可以分享一下客户端断线的代码吗?
  • @Grizzlly 断开连接时没有客户端代码,因为用户可能只是关闭了浏览器。我不知道他是否这样做。

标签: asp.net signalr blazor blazor-webassembly signalr-hub


【解决方案1】:

你需要在服务端为signalr配置token的中间件。

services.AddAuthentication().AddIdentityServerJwt();

services.TryAddEnumerable(
    ServiceDescriptor.Singleton
        <IPostConfigureOptions<JwtBearerOptions>,ConfigureJwtBearerOptions>());
public class ConfigureJwtBearerOptions : IPostConfigureOptions<JwtBearerOptions>
{
    public void PostConfigure(string name, JwtBearerOptions options)
    {
        var originalOnMessageReceived = options.Events.OnMessageReceived;
        options.Events.OnMessageReceived = async context =>
        {
            await originalOnMessageReceived(context);

            if (string.IsNullOrEmpty(context.Token))
            {
                var accessToken = context.Request.Query["access_token"];
                var path = context.HttpContext.Request.Path;

                if (!string.IsNullOrEmpty(accessToken) &&
                    path.StartsWithSegments("/hubs"))
                {
                    context.Token = accessToken;
                }
            }
        };
    }
}

注意:假设您的中心端点以“/hubs”开头

【讨论】:

  • 感谢您的帮助,但仍然无法正常工作:(
  • OnDisconnectedAsync 仅适用于 [AllowAnonymous] ,OnConnectedAsync 仅适用于 [Authorize] ,如果使用 [AllowAnonymous] 我无法从上下文中获取用户 ID
  • 我更了解我的问题,我在这里发布了 Anthor 问题。 stackoverflow.com/questions/70255433/…请看一下
  • 除非令牌由中间件处理,否则永远不会断开连接。
猜你喜欢
  • 2018-08-30
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多