Maison >développement back-end >C++ >Comment appeler les méthodes SignalR Core Hub à partir d'un contrôleur ASP.NET Core ?
Invocation des méthodes Hub SignalR Core à partir du contrôleur
Dans les applications ASP.NET Core, il est parfois nécessaire d'invoquer les méthodes Hub à partir d'un contrôleur. Par exemple, lorsque des services externes effectuent des tâches et doivent notifier les clients connectés via SignalR.
Solution 1 (Dynamique)
Si vous utilisez la bibliothèque Microsoft.AspNetCore.SignalR (version 1.0.0-alpha2-final), vous pouvez injecter le IHubContext de votre Hub dans votre contrôleur. Voici un exemple :
[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; } }
Solution 2 (typée)
Envisagez de créer une interface pour définir les méthodes que le serveur peut invoquer sur les hubs clients. Cette approche est connue sous le nom de « points de terminaison du hub typés » :
public interface ITypedHubClient { Task TaskCompleted(int id); } public class VarDesignHub : Hub<ITypedHubClient> { public Task TaskCompleted(int id) => Clients.All.InvokeAsync("Completed", id); }
Dans votre contrôleur, injectez le HubContext typé et invoquez les méthodes :
[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(); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!