示例我在一些地方(包括Microsoft SignalR官方网站)查看过,但不明白这是如何工作的。
我在课堂上实现了这个以获得不同的ID :(我没有使用IPrincipal.Identity.Name
)
public class CustomUserIdProvider : IUserIdProvider
{
public string GetUserId(IRequest request)
{
//for example
return Guid.NewGuid().ToString();
}
}
但我不明白我是如何或在哪里获得新生成的ID?有人可以告诉我吗?或者让我明白这一切是如何运作的!
提前谢谢。
**更新**
现在我知道这是如何运作的。其实我很困惑......我很困惑。 Client.Clients
Clients.User
ConncetionId
。所以没有得到预期的结果,我在Clients.User(Context.ConnectionId)
中使用了User
{{1}},这无关紧要。
对不起任何事情。
答案 0 :(得分:2)
无法检索新生成的ID。由于您在Hub方法内部以及PersistentConnection.OnReceived内部可以使用IRequest对象,因此您应该能够在Hub方法中从IRequest派生调用者的UserId,就像在自定义GetUserId方法中一样。
您的示例实现没有用,因为您不会为同一个调用者发出的每个请求返回相同的id。您可能拥有的一个选项是通过从you can customize的查询字符串中提取用户ID来识别您的用户。但是,如果您不希望欺骗UserIds,则必须小心如何执行此操作。
一旦你有办法从同一个来电者的所有IRequest中提取相同的UserId,你应该可以做如下的事情:
public class CustomUserIdProvider : IUserIdProvider
{
public string GetUserId(IRequest request)
{
//for example
return MyStatic.ExtractUserId(request);
}
}
public class MyHub : Hub
{
public string GetMyUserId()
{
return MyStatic.ExtractUserId(Context.Request);
}
public void SendToUser(string userId, string message)
{
Clients.User(userId).send(message);
}
}