【问题标题】:How to access IUrlHelper from SignalR Hub?如何从 SignalR Hub 访问 IUrlHelper?
【发布时间】:2018-06-18 08:45:22
【问题描述】:

从我的 SignalR Hub 类 (ASP.Net Core 2.1) 访问 IUrlHelper 的正确方法是什么?

我正在尝试在 Hub 类中动态生成指向不同操作的链接。

【问题讨论】:

    标签: asp.net-core .net-core signalr asp.net-core-signalr


    【解决方案1】:

    你不能。 UrlHelper 需要一个 ActionContext 实例来创建 URL,它只存在于请求的上下文中。 SignalR 集线器存在于请求管道之外。相反,您应该将 URL 从存在 UrlHelper 的某个位置(例如控制器操作)传递到适当的集线器方法,而不是依赖集线器来生成它。

    【讨论】:

    • 但是我的链接是根据 SignalR 消息生成的,在 .Net Core 2.0 之前我看到了不同的答案,但在 2.1 中它似乎不再起作用了。
    • 我不认为这是可能的,因为集线器从来都不是请求管道的一部分。
    • 这是我发现的一个例子,你怎么看? stackoverflow.com/questions/37322076/…。这不一定是 SignalR 的情况,但它们注入了 IUrlHelper 和 ActionContext(这对我不起作用,因为 ActionContext 为空)
    • 因为它假设您使用的是示例服务类在请求管道中,其中ActionContext 实际存在。如果您尝试在常规控制台应用程序中使用此服务类,它也会失败。 ActionContext 在您的集线器中为空,因为集线器不是请求管道的一部分。
    • 好的,我明白了,谢谢。你能显示你最后一句话的简单代码吗? 相反,您应该将 URL 从存在 UrlHelper 的某个地方(例如控制器操作)传递到适当的 hub 方法,而不是依赖 hub 来生成它。 因为我没有很好的想象力如何做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多