Appeler la méthode SignalR Core Hub à partir du contrôleur
Dans les applications ASP.NET Core, il est souvent nécessaire de communiquer avec les hubs SignalR des contrôleurs vers mettre à jour les applications côté client avec des événements côté serveur. Voici deux approches pour y parvenir :
Solution 1 : Utiliser un HubContext non typé
Cette méthode vous permet d'invoquer directement des méthodes sur tous les clients connectés. Injectez le 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); } }
Solution 2 : Utilisation de hubs et d'interfaces typés
Cette approche utilise des hubs et des interfaces typés pour définir des méthodes côté client qui peuvent être appelées depuis le contrôleur.
Créer une interface pour le hub client :
public interface ITypedHubClient { Task TaskCompleted(int id); }
Hériter de Hub
public class VarDesignHub : Hub<ITypedHubClient> { public async Task TaskCompleted(int id) { await Clients.All.InvokeAsync("Completed", id); } }
Injecter le contexte hub typé dans le contrôleur :
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); } }
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!