You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查看生产环境Blazor应用的当前在线用户?

查看Blazor应用当前在线用户的方法

可以通过SignalR Hub跟踪客户端连接,实现实时查看在线用户及数量的功能,具体步骤如下:

1. 改造SignalR Hub维护在线用户

在你的SignalR Hub类中,用线程安全的集合记录每个连接对应的用户信息,利用OnConnectedAsync和OnDisconnectedAsync钩子维护列表:

public class AppHub : Hub
{
    // 线程安全集合,键=连接ID,值=用户名(根据你的认证字段调整)
    private static readonly ConcurrentDictionary<string, string> _onlineUsers = new();

    public override async Task OnConnectedAsync()
    {
        // 从认证上下文获取当前用户名,需确保Blazor已配置认证
        var userName = Context.User?.FindFirst(ClaimTypes.Name)?.Value;
        if (!string.IsNullOrEmpty(userName))
        {
            _onlineUsers.TryAdd(Context.ConnectionId, userName);
        }
        await base.OnConnectedAsync();
    }

    public override async Task OnDisconnectedAsync(Exception? exception)
    {
        _onlineUsers.TryRemove(Context.ConnectionId, out _);
        await base.OnDisconnectedAsync(exception);
    }

    // 静态方法供外部获取去重后的在线用户列表
    public static List<string> GetOnlineUsers()
    {
        return _onlineUsers.Values.Distinct().ToList();
    }

    // 获取总连接数(含同一用户多设备连接)
    public static int GetTotalConnections()
    {
        return _onlineUsers.Count;
    }
}

2. 配置SignalR Hub

在Program.cs中注册并映射Hub:

builder.Services.AddSignalR();

// ...

app.MapHub<AppHub>("/appHub");

3. 实现查询接口或页面

方式一:后端API查询

写一个API接口,方便发布前调用查看:

[ApiController]
[Route("api/online-users")]
public class OnlineUsersController : ControllerBase
{
    [HttpGet]
    public IActionResult Get()
    {
        var users = AppHub.GetOnlineUsers();
        return Ok(new {
            在线用户数 = users.Count,
            具体用户 = users
        });
    }
}

发布前直接请求这个接口就能拿到当前在线用户信息。

方式二:Blazor页面展示

如果需要可视化查看,可在Blazor中添加一个仅管理员可见的页面,直接调用静态方法展示:

@page "/admin/online-users"
@using System.Linq

<h3>当前在线用户</h3>

<p>总连接数: @AppHub.GetTotalConnections()</p>
<p>去重用户数: @AppHub.GetOnlineUsers().Count()</p>

<ul>
    @foreach (var user in AppHub.GetOnlineUsers())
    {
        <li>@user</li>
    }
</ul>

注意事项

  • 若为多容器负载均衡部署,静态集合仅对当前容器有效,需改用Redis等分布式缓存存储在线用户数据,确保跨实例数据一致。
  • 需保证Blazor应用已正确配置用户认证,否则Context.User无法获取用户信息,只能统计连接数而非具体用户。
  • 可扩展集合存储更多用户信息(如用户ID、最后活跃时间),用于更精准的使用状态判断。

内容的提问来源于stack exchange,提问作者Foitn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:45:27