$.connection.hub.userId 未定义

$.connection.hub.userId undefined

我是 SignalR 的新手,经历了一个示例实现。我创建了一个简单的集线器,到目前为止我想要完成的是向特定用户发送消息。我让它工作了一天,但它不再工作了。我检查了 CustomUserIdProvider,它实际上返回了正确的用户 ID。任何建议将不胜感激。

这是我的中心

public class AssignmentHub : Hub
{
    public override Task OnConnected()
    {
        return base.OnConnected();
    }

    public override Task OnDisconnected(bool stopCalled)
    {
        return base.OnDisconnected(stopCalled);
    }

    public override Task OnReconnected()
    {
        return base.OnReconnected();
    }
}

这是我的 CustomerUserIdProvider

public class CustomUserIdProvider: IUserIdProvider
{
    public string GetUserId(IRequest request)
    {
        var userId = ((ClaimsIdentity) HttpContext.Current.User.Identity).FindFirst(ClaimTypes.NameIdentifier).Value;
        return userId;
    }
}

这些是我来自 _Layout.cshtml

的脚本
<script type="text/javascript" src="~/Scripts/jquery.signalR-2.4.0.min.js"></script>
<script type="text/javascript" src="~/signalr/hubs"></script>
<script type="text/javascript">
    $(function() {
        var assignmentNotificator = $.connection.assignmentHub;

        assignmentNotificator.client.addNotification = function (message) {   
            alert(message);
        }

        $.connection.hub.logging = true;
        $.connection.hub.start().done(function () {
            console.log($.connection.hub.userId);
        });
    });
</script>

还有我的一部分Global.asax

    protected void Application_Start()
    {
        GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider), () => new CustomUserIdProvider());
    }

David Fowler 已确认没有内置 userId。然后从 _Layout 中删除带有 $.connection.hub.userId 的行可以解决问题。我会说,因为没有内置的 userId,所以该行会使在 CustomUserIdProvider 中创建的映射无效。