在 SignalR 集线器内检索 UserID 的问题

Issue retrieving UserID inside SignalR hub

当我的 SignalR 私人聊天系统强制为每个连接的客户端更新客户端时,我的 SignalR 私人聊天系统正在运行,但我想简化这一点,以便仅在特定连接的用户特别收到新消息时更新他们。使用 msdn 上发布的 "Mapping SignalR users to connections" 我设置了所有内容并记录和更改连接 ID 和用户但是一旦我想为我的 Sql 查询检索他们的关联用户 ID 我得到 Null?

如上所述,当我使用 HTTPContext.User.Identity.GetUserId() 检索用户 GUID 时,查询工作正常,但现在我更新了代码,无论我做什么,我都无法再获取当前连接的 UsersID .即使关联的数据库函数在检索当前用户用户名时没有问题...

public override Task OnConnected()
{
var name = Context.User.Identity.Name;
who = Context.User.Identity.Name;
UserID = Context.User.Identity.GetUserId();
.....
}

string query = "SELECT msgTo, msgFrom, msgContent, date FROM [dbo].[messages] WHERE msgTo = @id";
connection.Open();
using (SqlCommand command = new SqlCommand(query, connection))
{
command.Parameters.AddWithValue("@id", UserID);
try
{
  ...
}

参数化查询“(@id nvarchar(4000))SELECT msgTo、msgFrom、msgContent、date FRO”需要未提供的参数“@id”。

我设法通过在每个请求中发送一个查询字符串来修复它($.connection.hub.qs = { userId: document.getElementById("usrid").value};) 然后检索它在集线器更新功能中