在开始之前,我想提一下,这并不完全是重复的,其他类似的问题对我的情况没有任何有用的答案。
在ASP.Net Core 2.1中,我有一个可以使用AJAX调用的动作(名称为CreateConversation
)。
在此应用程序中,我的应用程序上的每个用户都有一个活动的SignalR连接(因此,该连接在用户刷新/导航页面时启动)。
使用AJAX调用此操作时(用户单击页面上的某些按钮),我想将该连接添加到我的Hub
的特定组中。这里的问题是,为了能够从控制器将连接添加到集线器组,我需要从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才能解决此问题?还是有解决这个问题的更好方法?例如,我正在考虑将其保留在会话中,但是我无法访问SignalR中的HttpContext。我非常感谢您提出最佳建议,以便能够从集线器本身之外将我的连接添加到所需的集线器组。
答案 0 :(得分:1)
据我了解,您想向控制器中的任何组添加连接ID
startup.cs
g[length-1]
中心类
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);
}
}