当我们有一个自定义IUserIdProvider时,SignalR框架何时调用GetUserId方法,如下所示:
public class RealTimeNotificationsUserIdProvider : IUserIdProvider
{
public string GetUserId(IRequest request)
{
return request.QueryString["userId"];
}
}
ConnectionId到UserId映射的方式和时间以及以下方法如何工作:
Clients.User("1").notify(notificationsJson);
是否必须对用户进行身份验证才能使其正常工作?
答案 0 :(得分:1)
无需对用户进行身份验证即可使自定义IUserIdProvider正常工作。
但是,如果用户已通过身份验证,并且您未在SignalR的DependencyResolver中替换默认的IUserIdProvider,则客户端的用户ID将等于其{{1} }。
客户端的连接ID和用户ID之间没有完全映射,但是当客户端使用SignalR连接时,它将在内部建立订阅以接收发送到其连接ID和用户ID的消息。建立每个SignalR连接时调用IUserIdProvider.GetUserId,因此SignalR可以设置订阅。