首页 > 解决方案 > 如何在控制器外部发送消息?

问题描述

我需要将信息发送到 HUB 外的连接客户端。

这是我的课:

public static class Notification{
  public static void SendMessage(){
    //... Do some stuff
    MyHub.Clients.All.SendAsync("sendInfo");
  }
}

如何实例化 HUB?

标签: asp.net-coresignalrsignalr-hub.net-core-3.1

解决方案


据我所知,您可以使用 IHubContext 服务将服务消息发送到集线器之外。

如果您在 startup.cs 中的 ConfigureServices 中注册了服务,那么您可以通过依赖注入访问 IHubContext 的实例。

        services.AddSignalR();

例如,在控制器中注入 IHubContext 的实例。

public class HomeController : Controller
{
    private readonly IHubContext<NotificationHub> _hubContext;

    public HomeController(IHubContext<NotificationHub> hubContext)
    {
        _hubContext = hubContext;
    }
}

现在,通过访问 IHubContext 的实例,您可以调用中心方法,就好像您在中心本身中一样。

public async Task<IActionResult> Index()
{
    await _hubContext.Clients.All.SendAsync("Notify", $"Home page loaded at: {DateTime.Now}");
    return View();
}

更多细节,你可以参考这篇文章


推荐阅读