这是 Controller 方法,它接收应该被踢出的userName
。
public ActionResult Kick(string userName)
{
var hub = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
var user = userService.GetUserByName(userName);
hub.Clients.Client(user.ConnectionIdInHub).kickUser();
return Json(new { success = true});
}
kickUser()
- 这是一个 JS 方法。但是,当从 Controller 方法 Kick()
执行 kickUser()
时,客户端没有任何反应。
chatHub.client.kickUser = function () {
window.location.replace(window.kickUserActionUrl);
}
我应该怎么做才能解决这个问题?
我尝试这样做:
public static void OnKicked(string connectionId)
{
var hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
hubContext.Clients.Client(connectionId).closeConnection();
}
我像这样调用集线器方法 ChatHub.OnKicked(user.ConnectionIdInHub);
但还是不行
这是另一种解决方法:
我正在调用客户端 setInterval()
方法,该方法每十秒向服务器发送一次请求。 Json 方法通过在服务器上接收此请求来检查一件事:当前用户是否为 IsKicked=true
,在这种情况下,JSon 将发送回 new {success=true}
并用户将在踢页面上重新连接。
最佳答案
这帮助我从 hub 类外部执行 hub 方法。您可以直接从客户端调用 hub 方法,如下所示:
var myHub = $.coonection.hubName;
myHub.server.myMethod; //name of the method should begin with a small letter
关于javascript - Hub 方法在 hub 类外部不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42646068/