C# Access SignalR Hub上下文。ASP.NET Core中单例服务中的项
我试图对一个大表的信号器广播进行分页,以便每个订阅的组都有一个用户看到的“当前页面”。我希望页码的状态位于中心的Context.Items字典中 在我的集线器中,我设置了如下页码:C# Access SignalR Hub上下文。ASP.NET Core中单例服务中的项,c#,asp.net-core,.net-core,signalr,C#,Asp.net Core,.net Core,Signalr,我试图对一个大表的信号器广播进行分页,以便每个订阅的组都有一个用户看到的“当前页面”。我希望页码的状态位于中心的Context.Items字典中 在我的集线器中,我设置了如下页码: public class OnlineBotsHub : Hub { public async Task JoinGroup(string num) { await Groups.AddToGroupAsync(Context.ConnectionId, num); a
public class OnlineBotsHub : Hub
{
public async Task JoinGroup(string num)
{
await Groups.AddToGroupAsync(Context.ConnectionId, num);
await Clients.Group(num).SendAsync("AddedToGroup", "added to group number: " + num);
}
public void Pagination(string pageNum)
{
Context.Items.Add("page", pageNum);
}
}
private readonly IHubContext<OnlineBotsHub> _hub;
public OnlineBotService(IHubContext<OnlineBotsHub> hub)
{
_hub = hub;
}
Context.Items.TryGetValue("page", out object currentPage);
var returnList = PagedList<T>.ToPagedList(addBots.OrderBy(x => x.RowId), currentPage, 100);
目前,我将我的集线器注入singleton服务,如下所示:
public class OnlineBotsHub : Hub
{
public async Task JoinGroup(string num)
{
await Groups.AddToGroupAsync(Context.ConnectionId, num);
await Clients.Group(num).SendAsync("AddedToGroup", "added to group number: " + num);
}
public void Pagination(string pageNum)
{
Context.Items.Add("page", pageNum);
}
}
private readonly IHubContext<OnlineBotsHub> _hub;
public OnlineBotService(IHubContext<OnlineBotsHub> hub)
{
_hub = hub;
}
Context.Items.TryGetValue("page", out object currentPage);
var returnList = PagedList<T>.ToPagedList(addBots.OrderBy(x => x.RowId), currentPage, 100);
专用只读IHubContext\u hub;
公共OnlineBotService(IHubContext中心)
{
_轮毂=轮毂;
}
但我似乎无法使用此引用访问中心的Context.Items属性。
我希望在这样的单例服务中使用此值:
public class OnlineBotsHub : Hub
{
public async Task JoinGroup(string num)
{
await Groups.AddToGroupAsync(Context.ConnectionId, num);
await Clients.Group(num).SendAsync("AddedToGroup", "added to group number: " + num);
}
public void Pagination(string pageNum)
{
Context.Items.Add("page", pageNum);
}
}
private readonly IHubContext<OnlineBotsHub> _hub;
public OnlineBotService(IHubContext<OnlineBotsHub> hub)
{
_hub = hub;
}
Context.Items.TryGetValue("page", out object currentPage);
var returnList = PagedList<T>.ToPagedList(addBots.OrderBy(x => x.RowId), currentPage, 100);
Context.Items.TryGetValue(“页面”,out对象当前页面);
var returnList=PagedList.ToPagedList(addBots.OrderBy(x=>x.RowId),currentPage,100);
我是否能够以某种方式从另一个类访问中心的Context.Items字典
我是否能够以某种方式从另一个类访问中心的Context.Items字典
没有
相反,您应该拥有一个包含组信息的服务,您的中心和OnlineBotService都可以访问和使用该组信息
我似乎无法使用此引用访问中心的Context.Items属性
Context.Items.TryGetValue(“页面”,out对象当前页面)代码>
似乎您正在访问的是HttpContext.Items
,而不是在hub方法中设置的HubCallerContext.Items
请注意,HubCallerContext
是一个上下文抽象,用于访问有关集线器调用方连接的信息,在您的自定义/单例服务中没有与调用相关的调用方位于集线器类之外,因此,无法通过Hub类外部的HubCallerContext.Items
属性获取数据
如果可能的话,您可以尝试将数据保存在hub方法中的某个缓存存储中,然后可以从singleton服务中的缓存存储中获取数据