C# 在控制器(ASP.NET内核)中执行DI时,如何使用Signal中的Clients.Caller和Clients.Others?
我正在使用带ASP.NET核心的SignalR:C# 在控制器(ASP.NET内核)中执行DI时,如何使用Signal中的Clients.Caller和Clients.Others?,c#,asp.net-core,signalr,C#,Asp.net Core,Signalr,我正在使用带ASP.NET核心的SignalR: 公共类通知中心:中心 { } [路由(“api/[控制器]”)] [ApiController] 公共类控制器:ControllerBase { 私有只读IHubContext\u hubContext; 公共AController(IHubContext-hubContext) { _hubContext=hubContext; } } 我发现我只能使用属性Clients.Caller和Clients.Others 公共类通知中心:中心 {
公共类通知中心:中心
{
}
[路由(“api/[控制器]”)]
[ApiController]
公共类控制器:ControllerBase
{
私有只读IHubContext\u hubContext;
公共AController(IHubContext-hubContext)
{
_hubContext=hubContext;
}
}
我发现我只能使用属性Clients.Caller
和Clients.Others
公共类通知中心:中心
{
公开无效测试()
{
Clients.Caller.SendAsync(“aMethod”);
Clients.Others.SendAsync(“aMethod”);
}
}
使用IHubContext
时,我只能访问:
\u hubContext.Clients.All
是否有任何方法可以访问
客户端。调用者
和客户端。集线器外部的其他属性?您的信号器客户端仅与集线器通信,因此控制器中永远不会有“调用者”,只有集线器中才有
您传递给控制器的HubContext可用于将消息发送回任何已注册的连接,方法是向所有连接或选定的连接ID组广播
因此,如果可以将控制器用户与连接id相匹配,则可以通过发出Clients.Client(“连接id”)
,获得与Clients.Caller
等效的连接id,并通过使用Clients.AllExcept(…)获得与Clients.Others
或类似内容。MS在没有呼叫clinet的情况下提供和IHuBContext是毫无意义的
总是有一个正在调用的客户机,获得它的唯一方法是通过依赖项注入。
你真丢脸,女士。谢谢,这很有道理。出于好奇,我将检查Clients.Caller
和Clients.Others