【发布时间】:2021-06-18 16:53:44
【问题描述】:
我正在开发一个 ASP.NET Core MVC Web 应用程序。该应用程序使用 Windows 身份验证。一旦收到发布请求,我想从 API 控制器向客户端发送通知。我发现这个资源https://docs.microsoft.com/en-us/aspnet/core/signalr/authn-and-authz?view=aspnetcore-5.0) 说我需要使用 CustomUserIdProvider 来获取特定用户的 ID。但是,我不确定我应该如何调用以下方法:
_myHub.Clients.User(specificUserId).SendAsync("ReceiveMessage", message);
如何在我的 API 控制器中获取该 specificUserId。我尝试注入 CustomUserIdProvider 然后调用此方法:
_myHub.Clients.User(_customUserIdProvider.GetUserId(conn)).SendAsync("ReceiveMessage", message);
但是我不知道如何从这个 API 控制器获取 GetUserId 方法所需的 HubConnectionContext conn 对象。
这是 CustomUserIdProvider 类:
public class CustomUserIdProvider : IUserIdProvider
{
public string GetUserId(HubConnectionContext connection)
{
return connection.User?.Identity?.Name;
}
}
如果这不起作用,是否有任何其他方式可以将 SignalR 通知发送给通过 Windows 身份验证对 ASP.NET MVC Web 应用程序进行身份验证的特定用户?谢谢!
【问题讨论】:
-
您不存储此 ID(或从传入的帖子请求中获取它们)吗?我的意思是.. 你现在怎么能把这条消息发给谁呢?
-
我正在考虑在 post 请求中发送 [Domain][Username]。然后,如果我可以获得由 customUserIdProvider 生成的所有连接 Id,我可以将这些用户名映射到它们对应的 connectionId。但是,如何使用 customeUserIdProvider 方法在我的 API 控制器中获取这些连接 ID?
标签: c# asp.net-core asp.net-core-mvc signalr windows-authentication