gpt4 book ai didi

asp.net - 如何从 Hub 外部将 SignalR 连接添加到 Hub 组?

转载 作者:行者123 更新时间:2023-12-05 07:32:48 31 4
gpt4 key购买 nike

在开始之前,我想提一下,这并不完全是重复的,其他类似的问题对我的情况没有任何有用的答案。

在我的 ASP.Net Core 2.1 中,我有一个可以使用 AJAX 调用的操作(它的名称是 CreateConversation)。

在此应用程序中,我为我的应用程序上的每个用户建立了一个事件的 SignalR 连接(因此连接在用户刷新/导航页面时启动)。

当使用 AJAX 调用此操作时(用户单击页面上的某个按钮),我想将该连接添加到我的 Hub 的特定组。这里的问题是,为了能够从 Controller 添加到集线器组的连接,我需要从 HubCallerContext 访问该连接的 ID),而这个 ID 在集线器外部不可用。

public class ConversationsController
{
public async Task<IActionResult> CreateConversation()
{
// How can this be made possible?
await Groups.AddToGroupAsync(/**Context.ConnectionId**/, "SomeGroup");
}
}

到目前为止,我从未手动保存集线器连接的 ID(我还不需要)。是否必须坚持 HubCalledContext.Id 才能解决此问题?还是有更好的方法来解决这个问题?例如,我正在考虑将其保留在 session 中,但我无权访问 SignalR 中的 HttpContext。我感谢任何能够从集线器本身外部将我的连接添加到所需集线器组的最佳建议。

最佳答案

据我了解,您想将连接 ID 添加到 Controller 中的任何组

启动.cs

public void ConfigureServices(IServiceCollection services)
{
// Inject to Hub
services.AddScoped<ChatHub>();
}

中心类

public class Chathub : hub
{
IHubContext<Chathub> _hubcontext;
public ChatHub(IHubContext<Chathub> hubcontext)
{
_hubcontext = hubcontext;
}

public async Task AddToGroup(string groupName)
{
await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
}
}

Controller

public class AnyController 
{
//if you want to access connectionId in here , add hubcontext in here too
private readonly ChatHub _chatHub;
public AnyController(ChatHub chatHub)
{
_chatHub = chatHub;
}

public IActionResult Index()
{
_chatHub.AddToGroup("groupname");
}
}

关于asp.net - 如何从 Hub 外部将 SignalR 连接添加到 Hub 组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51016092/

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