在我的应用程序中,我计划使用SignalR,以便后端代码根据服务器上出现的情况向登录的用户发送消息。特别是,我希望SignalR在后端发生任何事情时都能调用JS客户端上的方法。这可能是在后端发生的周期性计算,突然超过阈值,我需要在JS客户端上为特定用户调用一些东西。特定的用户是这里的关键元素。只有应该知道这一点的用户。我假设这对于SignalR来说应该是非常简单的,但我在理解实现这一点的方法时遇到了一些问题。我的解决方案如下;
因此,要应用此解决方案,我需要获取有关刚刚在C#集线器内登录的用户的信息,以便创建组并加入他。
现在我的问题是,如何从登录到C#集线器中的应用程序的用户那里访问所需的信息。当然,我对用户名标识符感兴趣。我一直在想,Hub中的Context属性应该给我所需的信息(这是我对MS Docs的理解),但我不能让它工作。请研究下面的代码。
// As soon as a User logs in, below method fires. I try to get the information
// in here but no success
public override async Task OnConnectedAsync()
{
var CID = Context.ConnectionId; // this gives a unique connection ID
var user = Context.User; // This returns nothing
var userID = Context.UserIdentifier; // This returns nothing
var httpContextObject = Context.GetHttpContext(); // This returns nothing
await base.OnConnectedAsync();
}
当我从JS调用Context Hub中的其他方法时,该方法将被激发并传递信息,但我仍然无法访问C#属性应提供的信息。
请首先帮助我确认或更正我的整体方法,以及是否有众所周知的最佳实践。其次,请让我知道如何获得上下文属性在Hub中提供的信息,以及这些信息通常在哪里可用,以及如何访问和使用它们。
在此之前,非常感谢您。
发布于 2019-07-10 03:15:22
' User‘是一个声明原则(通常存储在asp cookie中),让用户从您的身份数据库中使用:
var user = await _userManager.GetUserAsync(User);
为了便于将来参考,你的问题很长,如果你的问题简明扼要,你会得到更多的帮助。
发布于 2019-07-26 13:45:50
我已经通过在SignalR中使用身份验证解决了我的问题。我不需要将用户添加到任何组中,就可以向他们推送消息。在Startup类中,我将身份验证添加到SignalR服务之上,然后将user对象传递给Context属性中的Hub。我还可以通过将IHubContext注入到我需要的任何类构造函数来推送到任何用户。
https://stackoverflow.com/questions/56944923
复制相似问题