$.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 中创建的映射无效。
我是 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 中创建的映射无效。