gpt4 book ai didi

c# - 在 Web API 调用中检索 SignalR connectionId

转载 作者:太空宇宙 更新时间:2023-11-03 14:43:10 25 4
gpt4 key购买 nike

我有以下星座:

我正在使用一个 asp.net 核心 web api 项目,其中还包括一个 HubContext。用户必须做的第一件事是对我的 UsersController : BaseController 进行 api 调用。在这里,他/她调用传递相应凭据的 api/login 路由。 Login() 函数的返回值是一个 JwtBearerToken,用户从此以后将其用于所有其他 api 调用。

颁发 token 后,用户(客户端)通过我的 ConnectionHub : Hub 建立 SignalR 连接。

到目前为止一切正常,用户在调用 api 方法时使用 token 进行身份验证,我还可以在我的 ConnectionHub 范围内跟踪相应的 session 状态。

现在我必须在他/她进行 api 调用时检索用户 (SignalR) session ID。

我。 e.当用户调用我的 UsersController 中的方法时,我想做这样的事情:


[HttpGet]
public ActionResult<List<User>> GetAll()
{
// Here I want to retrieve the (SignalR) session id of the user calling this method.
return Ok( userRepository.GetAllUsers() );
}

到目前为止,我唯一的想法是让用户通过相应的 api 调用发送他的 SignalR-SessionId,但我想要实现的是在服务器端读取 Id。我怎样才能做到这一点?

最佳答案

根据微软documentation ,不可能在集线器外部(例如在 Controller 中)获取用户的 connectionId:

When hub methods are called from outside of the Hub class, there's no caller associated with the invocation. Therefore, there's no access to the ConnectionId, Caller, and Others properties.


但是,您可以通过调用 hub 方法使用 JavaScript 获取用户。在这里,您可以访问 connectionId 并使用您的存储库访问数据库(确保它可以通过依赖注入(inject)获得)。

我不知道你想对用户做什么,但你可以简单地在 hub 方法中返回用户并用 connectionId 做一些事情。

YourHubClass.cs

public Task GetAllUsers()
{
// Get the ConnectionId
var connectionId = Context.ConnectionId;

// Get the users list
var users = userRepository.GetAllUsers();

// ...

return Clients.User(user).SendAsync("UserListRequested", users);
}

关于c# - 在 Web API 调用中检索 SignalR connectionId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55740272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com