如何调用 signalR 函数仅用于 web API Caller by c#

how Call a signalR function just for web API Caller by c#

我需要在刚刚调用 Web API 方法的客户端上回调一个函数。我可以发回给所有用户,但我只需要呼叫呼叫者即可。

        [HttpPost]
        public WebResult Logout()
        {
     var cc =Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext<EventsHub>();
         cc.Clients.All.TestLogOut();
        }

我知道如果我有来电者的connectionId可能是可能的,但我不知道怎么可能?

另外,似乎有一些 IHbubCallerContext...它是什么,它有帮助吗?如果可以得到调用者和connectioId!

cc.Clients.Client("ConnectionId").TestLogoutCurrent();

如何回调调用者函数或如何获取调用者 connectionId?

谢谢

您可以从 SignalR Hub 实现中调用调用方客户端上的函数:

[HubName("MyHub")]
public class MyHub : Hub
{
    public void logout()
    {
        Clients.Caller.clientLogout();
    }
}

终于找到解决办法了,貌似我们无法在 web 中获取连接 ID API, 所以我们需要创建一个 HUB class 并从客户端调用一个方法。在那个方法中,我们有调用者和连接 ID,所以我们可以回调这个方法。

public class EventHub : Hub

    {
        public void LogOutSignalRTest()
        {

            var cc = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext<EventsHub>();
                cc.Clients.Client(Context.ConnectionId).clientlogout();

        }

    }

这里的上下文是 HubCallerContext 的类型,所以我们有连接 ID, clientlogout 是客户端的一个函数。