ASP.NET Core SignalR仅将消息路由到某些客户端

时间:2018-11-15 17:32:51

标签: asp.net-core asp.net-core-signalr

我有一个ASP.NET Core网站,在其中实现了一个名为NotificationHub的中心:

public interface INotificationHub
{      
    Task SendNotificationMessage(NotificationMessage message);
}

public class NotificationHub : Hub<INotificationHub>
{    
     public async Task SendMessage(NotificationMessage message)
     {          
        await Clients.All.SendNotificationMessage(message);
     }
}

我有两个Winforms客户端,可以成功连接到集线器并发送/接收消息。我的网站上还有一个页面,可以通过注入到控制器中的HubContext发送消息。

   await _hubContext.Clients.All.SendNotificationMessage(new NotificationMessage { "some message"  });

理想情况下,我想要的是向特定客户端而非所有客户端发送消息。我知道当客户端连接时,OnConnectedAsync方法中有Context.ConnectionId,但是我不确定如何映射它,因此我只能将某些消息从Controller(或javascript)路由到某些客户端。即,我的网站上发生了某种活动,我只想通知一个客户,而不通知另一个。

1 个答案:

答案 0 :(得分:0)

如果您使用的是最新版本,则应该可以通过用户ID进行操作。

public async Task SendMessage(string userId, string message)
{
    await Clients.User(userId).SendAsync(message);
}

OR

await _hubContext.Clients.User(userId).SendNotificationMessage(new NotificationMessage { "some message"  });