如何在控制器外发送信息?

问题描述 投票:0回答:1

我需要在HUB之外发送信息给连接的客户端。

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

如何实例化HUB?

asp.net-core signalr signalr-hub .net-core-3.1
1个回答
1
投票

据我所知,你可以使用IHubContext服务在Hub之外发送服务消息。

如果你在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();
}

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


0
投票

你可以像@张兰多上面发布的那样做,或者直接将Hub注入到你的控制器或管理器中,比如。

控制器

private IHubContext<YourHub, IYourHub> YourHub
{
    get
    {
        return this.HttpContext.RequestServices.GetRequiredService<IHubContext<YourHub, IYourHub>>();
    }
}

其他

private IHubContext<YourHub, IYourHub> YourHub
{
    get
    {
        return this.serviceProvider.GetRequiredService<IHubContext<YourHub, IYourHub>>();
    }
}

PS:建议注入HubContext,而不是直接注入Hub。

© www.soinside.com 2019 - 2024. All rights reserved.