在控制器(ASP.NET Core)中进行 DI 时,如何使用 SignalR

我将 SignalR 与 ASP.NET Core 结合使用:


public class NotificationHub : Hub

{

}

[Route("api/[controller]")]

[ApiController]

public class AController : ControllerBase

{

    private readonly IHubContext<NotificationHub> _hubContext;


    public AController(IHubContext<NotificationHub> hubContext)

    {

        _hubContext = hubContext;

    }

}

我发现我只能使用属性Clients.Caller和Clients.Others


public class NotificationHub : Hub

{

        public void Test()

        {

            Clients.Caller.SendAsync("aMethod");

            Clients.Others.SendAsync("aMethod");

        }

}

虽然IHubContext<NotificationHub>我只能访问:


_hubContext.Clients.All

有什么方法可以访问中心外的资源Clients.Caller并获取其属性吗?Clients.Others


德玛西亚99
浏览 99回答 2
2回答

慕容708150

您的 SignalR 客户端仅与集线器通信,因此控制器中永远不会有“调用者”,而仅在集线器中。您传递给控制器的 HubContext 可用于将消息发送回任何已注册的连接,方法是广播到所有连接 ID 或选定的一组连接 ID。因此,如果您可以将控制器用户与连接 ID 相匹配,则可以Clients.Caller通过发出 aClients.Client("connection-id")和 a&nbsp;Clients.Othersby usingClients.AllExcept(...)或类似命令来获得等效的效果。

萧十郎

MS 在没有 CallingClinet 的情况下提供 IHuBContext 是毫无意义的。总是有一个调用客户端,获得它的唯一方法是通过依赖注入。MS你真丢脸。
打开App,查看更多内容
随时随地看视频慕课网APP