从控制器调用 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中文网其他相关文章!