在mvc Idenity Logout上断开SignalR用户

时间:2015-12-15 10:02:29

标签: jquery model-view-controller signalr asp.net-identity

我正在使用signalR跟踪页面上有多少人在线。

它在用户登录时更新列表。

matches(CustomItemMatchers.withErrorName(equalTo("My Error")))

我已经尝试了很多东西,当他们退出时从列表中删除用户,但到目前为止,我无法使任何工作。

有人知道如何做到这一点。

1 个答案:

答案 0 :(得分:1)

ChatHub添加方法,以便您可以从用户名中查询ConnectionId。然后做这样的事情;

<强>控制器

public class AccountController : Controller
{
    private readonly SignInManager<ApplicationUser> _signInManager;
    private readonly IHubContext<ChatHub> _hubContext;

    public AccountController(
        SignInManager<ApplicationUser> signInManager,
        IHubContext<ChatHub> hubContext)
    {
        _signInManager = signInManager;
        _hubContext = hubContext;
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> LogOff()
    {
        var connectionid = ChatHub.GetConnectionIdByName(User.Identity.Name);
        await _signInManager.SignOutAsync();
        await _hubContext.Clients.Client(connectionId).logoff();
        return RedirectToAction(nameof(HomeController.Index), "Home");
    }
}

<强>的Javascript

$.connection.chathub.client.logoff = function() {
    $.connection.hub.stop();
}