我將 SignalR 與 ASP.NET Core 結(jié)合使用:public class NotificationHub : Hub{}[Route("api/[controller]")][ApiController]public class AController : ControllerBase{ private readonly IHubContext<NotificationHub> _hubContext; public AController(IHubContext<NotificationHub> hubContext) { _hubContext = hubContext; }}我發(fā)現(xiàn)我只能使用屬性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貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊
您的 SignalR 客戶端僅與集線器通信,因此控制器中永遠(yuǎn)不會(huì)有“調(diào)用者”,而僅在集線器中。
您傳遞給控制器的 HubContext 可用于將消息發(fā)送回任何已注冊(cè)的連接,方法是廣播到所有連接 ID 或選定的一組連接 ID。
因此,如果您可以將控制器用戶與連接 ID 相匹配,則可以Clients.Caller
通過發(fā)出 aClients.Client("connection-id")
和 a Clients.Others
by usingClients.AllExcept(...)
或類似命令來獲得等效的效果。

蕭十郎
TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
MS 在沒有 CallingClinet 的情況下提供 IHuBContext 是毫無意義的。
總是有一個(gè)調(diào)用客戶端,獲得它的唯一方法是通過依賴注入。MS你真丟臉。
- 2 回答
- 0 關(guān)注
- 131 瀏覽
添加回答
舉報(bào)
0/150
提交
取消