为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
德玛西亚99 2023-08-20 09:48:01
我将 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.Othersby usingClients.AllExcept(...)或类似命令来获得等效的效果。


查看完整回答
反对 回复 2023-08-20
?
萧十郎

TA贡献1815条经验 获得超12个赞

MS 在没有 CallingClinet 的情况下提供 IHuBContext 是毫无意义的。

总是有一个调用客户端,获得它的唯一方法是通过依赖注入。MS你真丢脸。


查看完整回答
反对 回复 2023-08-20
  • 2 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信