首页 > 解决方案 > 我如何通过控制器的 userId 向特定用户发送 signalR 消息?

问题描述

我无法从控制器向特定用户发送通知消息。

我的控制器:

public class SomeController : ControllerBase
{
    private readonly IHubContext<NotificationHub> _hubContext;
    public SomeController(IHubContext<NotificationHub> hubContext)
    {
        _hubContext = hubContext;
    }

    public async Task SomeMethod()
    {

        //it works 
        await _hubContext.Clients.All.SendAsync("sendMessage", msg);

        //it doesn't work
        await _hubContext.Clients.User(userId).SendAsync("sendMessage", msg);
        //it also doesn't work 
        await _hubContext.Clients.Client(userId).SendAsync("sendMessage", msg);
    }
}

不幸的是,IHubContext 有一些不完善的地方。在 Clients 属性中,只有 Clients 可用。All - 也就是说,我们只能向所有客户端发送消息,并且在 hub 类中没有可用的诸如 Other 或 Caller 之类的属性。此外,我们无法从 IHubContext 获取连接 ID。

还有其他方法可以做到吗?还是只有 SQL 依赖才有可能?

标签: c#asp.net-coresignalrasp.net-core-signalr

解决方案


推荐阅读