有没有办法让 Asp.net 零公共站点(Asp.net MVC)中的实时登录用户?
Posted
技术标签:
【中文标题】有没有办法让 Asp.net 零公共站点(Asp.net MVC)中的实时登录用户?【英文标题】:Is there a way to get realtime logged in users in Asp.net zero public site (Asp.net MVC)? 【发布时间】:2022-01-22 02:39:59 【问题描述】:我正在使用 Asp.net 零 [版本 10.2.0] 制作 Web 应用程序 使用 ABP 框架 6.2 版 前端在 Angular 11 中,后端 API 在 Asp.net core 5.0 中,而公共网站在 Asp.net MVC 中。
我正在尝试使用 SignalR 在前端(Angular)和公共(Asp.net MVC)网站上获取登录用户,以在管理仪表板上显示它。两者都使用相同的数据库表 ABPUsers。有没有人用 SignalR 或其他方式做过类似的事情?
任何帮助表示赞赏
【问题讨论】:
【参考方案1】:我在 ASP.NET(不是 Core)上使用 SignalR 做了类似的事情。我在Hub
类中重载了OnConnected
和OnDisconnected
方法,以保留我自己的连接客户端字典。
每个客户端都有一个包含其登录信息的标题。在OnConnected
中,我将解析标头并检查此客户端是否已连接。如果不是,我会将它们添加到字典中。在OnDisconnected
中,我会检查此客户端是否已连接,如果已连接,请将其从字典中删除。这样,字典总是有连接的客户端。
注意:因为每次新登录都会创建一个新的Hub
,所以字典必须是单例或静态的。我使用 静态 ConcurrentDictionary
。
注意 2: SignalR 具有用于存储所有客户端的内部结构,但如果不修改库就无法轻松搜索,并且公共方法非常有限。这就是我使用自己的字典的原因。
【讨论】:
请注意,一个客户端/登录可以打开多个选项卡。因此,您需要为用户保存特定的连接 ID,并且只将其从您的集合中删除。当一个用户的所有连接 ID 都被删除时,该用户就会断开连接。 我使用标头数据来识别特定的客户/用户。 ConnectionID 对此没有用处。以上是关于有没有办法让 Asp.net 零公共站点(Asp.net MVC)中的实时登录用户?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法让图像通过 ASP.NET 和 app_offline.htm 显示?