首页 >后端开发 >C++ >如何从 ASP.NET Core 控制器调用 SignalR Core Hub 方法?

如何从 ASP.NET Core 控制器调用 SignalR Core Hub 方法?

Patricia Arquette
Patricia Arquette原创
2025-01-04 09:13:34879浏览

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

从控制器调用 SignalR Core Hub 方法

在 ASP.NET Core 应用程序中,经常需要从控制器与 SignalR Hub 进行通信使用服务器端事件更新客户端应用程序。以下是实现此目的的两种方法:

解决方案 1:使用无类型 HubContext

此方法允许您直接调用所有连接的客户端上的方法。注入非类型化 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);
    }
}

解决方案 2:使用类型化集线器和接口

此方法使用类型化集线器和接口来定义可以调用的客户端方法从控制器。

为集线器创建一个接口客户端:

public interface ITypedHubClient
{
    Task TaskCompleted(int id);
}

继承自Hub;使用类型化的客户端接口:

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

将类型化的集线器上下文注入控制器:

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

以上是如何从 ASP.NET Core 控制器调用 SignalR Core Hub 方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn