【发布时间】:2021-06-21 23:23:07
【问题描述】:
我需要为我的 asp.net core 2.2 站点实现一些推送通知。 我找到了信号器,并开始查看它。我尝试实现一个小玩具示例,现在我有一个看起来像这样的集线器类:
尽可能简单。我现在有一个控制器,我需要从中触发客户端计算机上的推送通知。这可能是由控制器被击中触发的(在我的真实项目中,当用户在线以及在我的网站上发布新文章时,我需要发送推送通知)。 所以这是我的控制器:
public class msgController : Controller
{
public IActionResult Index()
{
return Content("serving content");
}
}
但我现在需要以某种方式触发集线器的 sendMessage 功能。如果我只是将集线器放在控制器中,我就可以调用它,如下所示:
public class msgController : Controller
{
private IHubContext<NotificationHub> _hub;
public msgController(IHubContext<NotificationHub> hub)
{
_hub = hub;
}
public IActionResult Index()
{
_hub.Clients.All.SendAsync("ReceiveMessage", "bruger", "besked");
return Content("serving content");
}
}
但我想使用我实际的 Hub 类,而且,我能找到的所有文档都没有这样做。我怎么能这样做?
我看到一些地方给answers that 对我来说真的没有多大意义,比如只是通过 GlobalHost 访问 contexthub,这对我来说是不可用的。其他地方声称这个just is'nt possible。
那么我如何调用/触发我的集线器,并向客户端发送消息? 此外,我的站点版本(集线器刚刚写入控制器)现在可以正常工作,并且调用了 sendmesage() 函数。但我真的看不到客户端发送的消息。我在哪里可以找到它?
【问题讨论】:
-
GlobalHost 在 .net 核心中不可用,这是一个 .net 完整的 signalR 版本。 IHubContext 注入有什么问题?这正是做你想做的事的方式。
-
嗯,这是因为我希望我的集线器包含与集线器相关的所有其他方法。诸如 onconnected 之类的东西
-
另外我想在我的 hub 类中定义自己的函数
-
好吧,没有 HubContext 就无法获得 Hub。选择@Kiril1512 的答案,或者将您的集线器包装在另一个类中(使用 HubContext 注入)。将您需要的方法添加到包装器中,而不是在任何地方使用包装器。