從控制器呼叫SignalR Core Hub 方法
在ASP.NET Core 應用程式中,經常需要從控制器與SignalR Hub 進行通訊使用伺服器端事件更新客戶端應用程式。以下是實現此目的的兩種方法:
解決方案1:使用無類型HubContext
此方法可讓您直接呼叫所有連接的客戶端上的方法。注入非類型化IHubContext
public class VarDesignCommController : Controller { private readonly IHubContext<VarDesignHub> _hubContext; public VarDesignCommController(IHubContext<VarDesignHub> hubContext) { _hubContext = hubContext; } [HttpPut("ProcessVarDesignCommResponse/{id}")] public async Task<IActionResult> ProcessVarDesignCommResponse(int id) { await _hubContext.Clients.All.InvokeAsync("TaskCompleted", id); return new JsonResult(true); } }
解決方案2:使用類型化集線器和介面
此方法使用類型化集線器和介面來定義可以呼叫的客戶端方法從控制器。
為集線器建立一個介面客戶端:
public interface ITypedHubClient { Task TaskCompleted(int id); }
繼承自Hub
public class VarDesignHub : Hub<ITypedHubClient> { public async Task TaskCompleted(int id) { await Clients.All.InvokeAsync("Completed", id); } }
將類型化的集線器上下文注入控制器:
public class VarDesignCommController : Controller { private readonly IHubContext<VarDesignHub, ITypedHubClient> _hubContext; public VarDesignCommController(IHubContext<VarDesignHub, ITypedHubClient> hubContext) { _hubContext = hubContext; } [HttpPut("ProcessVarDesignCommResponse/{id}")] public async Task<IActionResult> ProcessVarDesignCommResponse(int id) { await _hubContext.Clients.All.TaskCompleted(id); return new JsonResult(true); } }
以上是如何從 ASP.NET Core 控制器呼叫 SignalR Core Hub 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!