首页 > 解决方案 > 从控制器 Asp.Net Core SignalR 发送消息

问题描述

任何人都可以分享描述如何以正确方式使用 IHubContext 的链接吗?因为如果我可以直接从控制器发送消息,我只是混淆了我的 NotificationHub 的目的是什么?

    public class NotificationHub : Hub
    {
         public async Task SendMessage(string user, string message)
         {
             await Clients.All.SendAsync("ReceiveMessage", user, message);
         }
    }

我从控制器中调用的内容:

await hubContext.Clients.Client(user.Id.ToString()).SendAsync("ReceiveMessage", user.FirstName);

其中 hubcontext 类型IHubContext<NotificationHub>

从控制器发送消息的正确方法是什么?

标签: .netasp.net-core.net-coresignalrasp.net-core-signalr

解决方案


任何人都可以分享描述如何以正确方式使用 IHubContext 的链接吗?

https://docs.microsoft.com/en-us/aspnet/core/signalr/hubcontext?view=aspnetcore-2.1

在您的示例代码中,用户 ID 是什么?Client.Client 用于 SignalR 连接 ID。您想在发送给特定用户时使用 UserId ( Clients.User)

因为如果我可以直接从控制器发送消息,我只是混淆了我的 NotificationHub 的目的是什么?

如果您不想使用控制器,则可以使用集线器接收传入数据。如果你想支持纯 HTTP API,你可以使用控制器。如果您想使用 WebSockets(或 SignalR 支持的其他传输)接收传入数据,则可以使用 Hub。

它对于处理连接生命周期事件(如 OnConnectedAsync 和 OnDisconnectedAsync)也很有用。这使您可以在特定连接连接或断开连接时执行操作。


推荐阅读