作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在开始之前,我想提一下,这并不完全是重复的,其他类似的问题对我的情况没有任何有用的答案。
在我的 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/
我是一名优秀的程序员,十分优秀!