信号 R - OnDisconnectedAsync(异常?异常)函数不工作
Signal R - OnDisconnectedAsync(Exception? exception) Function is Not working
我正在使用 blazor web assembly 在网络上开发聊天应用程序
我正在尝试将用户的状态(在线/离线)推送给其他人。
这里是信号RHub
连接时工作正常。
public override Task OnConnectedAsync()
我的问题是 OnDisconnectedAsync() 根本没有被调试器击中
即使我关闭了服务器所连接的客户端(浏览器)。
public override Task OnDisconnectedAsync(Exception? exception)
{
var userId = _userManager.GetUserId(Context.User);
return base.OnDisconnectedAsync(exception);
}
您需要在服务器上为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”开头
我正在使用 blazor web assembly 在网络上开发聊天应用程序
我正在尝试将用户的状态(在线/离线)推送给其他人。
这里是信号RHub
连接时工作正常。
public override Task OnConnectedAsync()
我的问题是 OnDisconnectedAsync() 根本没有被调试器击中
即使我关闭了服务器所连接的客户端(浏览器)。
public override Task OnDisconnectedAsync(Exception? exception)
{
var userId = _userManager.GetUserId(Context.User);
return base.OnDisconnectedAsync(exception);
}
您需要在服务器上为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”开头