Maison > développement back-end > C++ > Comment puis-je appeler une méthode SignalR Core Hub à partir d'un contrôleur ASP.NET Core ?

Comment puis-je appeler une méthode SignalR Core Hub à partir d'un contrôleur ASP.NET Core ?

Patricia Arquette
Libérer: 2025-01-04 09:13:34
original
870 Les gens l'ont consulté

How Can I Call a SignalR Core Hub Method from an ASP.NET Core Controller?

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 dans votre contrôleur :

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);
    }
}
Copier après la connexion

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);
}
Copier après la connexion

Hériter de Hub avec l'interface client typée :

public class VarDesignHub : Hub<ITypedHubClient>
{
    public async Task TaskCompleted(int id)
    {
        await Clients.All.InvokeAsync("Completed", id);
    }
}
Copier après la connexion

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);
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal