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

Comment appeler les méthodes SignalR Core Hub à partir d'un contrôleur ASP.NET Core ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-05 05:55:44798parcourir

How to Invoke SignalR Core Hub Methods from an ASP.NET Core Controller?

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!

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