從控制器呼叫 SignalR Core Hub 方法
在 ASP.NET Core 應用程式中,有時需要從控制器呼叫 Hub 方法。例如,當外部服務執行任務並需要透過 SignalR 通知連線的用戶端時。
解決方案1(動態)
如果您使用Microsoft.AspNetCore.SignalR 庫(版本1.0.0-alpha2-final),您可以將Hub的IHubContext注入到控制器中。以下是一個範例:
[Route("API/vardesigncomm")] public class VarDesignCommController : Controller { [HttpPut("ProcessVarDesignCommResponse/{id}")] public async Task<IActionResult> ProcessVarDesignCommResponse(int id) { await this.HubContext.Clients.All.InvokeAsync("Completed", id); return new JsonResult(true); } private IHubContext<VarDesignHub> HubContext { get; set; } }
解決方案 2(鍵入)
考慮建立一個介面來定義伺服器可以在客戶端集線器上呼叫的方法。這種方法稱為「類型化集線器端點」:
public interface ITypedHubClient { Task TaskCompleted(int id); } public class VarDesignHub : Hub<ITypedHubClient> { public Task TaskCompleted(int id) => Clients.All.InvokeAsync("Completed", id); }
在您的控制器中,注入類型化 HubContext 並呼叫方法:
[Route("API/demo")] public class DemoController : Controller { private IHubContext<VarDesignHub, ITypedHubClient> _chatHubContext; public DemoController(IHubContext<VarDesignHub, ITypedHubClient> chatHubContext) { _chatHubContext = chatHubContext; } [HttpGet] public IActionResult TaskCompleted(int id) { _chatHubContext.Clients.All.TaskCompleted(id); return Ok(); } }
以上是如何從 ASP.NET Core 控制器呼叫 SignalR Core Hub 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!