我将 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.Otherspublic class NotificationHub : Hub{ public void Test() { Clients.Caller.SendAsync("aMethod"); Clients.Others.SendAsync("aMethod"); }}虽然IHubContext<NotificationHub>我只能访问:_hubContext.Clients.All有什么方法可以访问中心外的资源Clients.Caller并获取其属性吗?Clients.Others
2 回答
慕容708150
TA贡献1831条经验 获得超4个赞
您的 SignalR 客户端仅与集线器通信,因此控制器中永远不会有“调用者”,而仅在集线器中。
您传递给控制器的 HubContext 可用于将消息发送回任何已注册的连接,方法是广播到所有连接 ID 或选定的一组连接 ID。
因此,如果您可以将控制器用户与连接 ID 相匹配,则可以Clients.Caller
通过发出 aClients.Client("connection-id")
和 a Clients.Others
by usingClients.AllExcept(...)
或类似命令来获得等效的效果。
萧十郎
TA贡献1815条经验 获得超12个赞
MS 在没有 CallingClinet 的情况下提供 IHuBContext 是毫无意义的。
总是有一个调用客户端,获得它的唯一方法是通过依赖注入。MS你真丢脸。
- 2 回答
- 0 关注
- 93 浏览
添加回答
举报
0/150
提交
取消