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
Patricia Arquetteoriginal
2025-01-04 09:13:34878parcourir

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);
    }
}

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 avec l'interface client typée :

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!

Déclaration:
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