【问题标题】:'HubCallerContext' does not contain a definition for 'Request' singnalr .netcore“HubCallerContext”不包含“请求”信号器 .net 核心的定义
【发布时间】:2020-12-09 16:15:06
【问题描述】:

我正在使用带有 .Net Core 3.0 和 Angular 8 的信号器

public class ConnectionHub : Hub
{
    public ConnectionHub()
    {
    }
    public override async Task OnConnectedAsync()
    {
        //get userName, token and other stuff
        await base.OnConnectedAsync();
    }
    public override async Task OnDisconnectedAsync(Exception exception)
    {
        await base.OnDisconnectedAsync(exception);
    }
}

在startup.cs中添加:

app.UseSignalR(options =>
            {
                options.MapHub<ConnectionHub>("/ConnectionHub");
            });

角度

//configure
private connection: any = new signalR.HubConnectionBuilder().withUrl("http://localhost:6002/ConnectionHub?userName='abc'")
        .configureLogging(signalR.LogLevel.Information)
        .build();
//start
this.connection.start()

我想访问在查询参数中发送的自定义数据,但在 OnConnectedAsync 中,上下文如下:

如何在 OnConnectedAsync() 方法中访问查询参数。 Documentation 说我可以使用 Context.Request,但在 OnConnectedAsync 中它说“HubCallerContext”不包含“请求”的定义

【问题讨论】:

  • 您是否参考过在 Hub 类的覆盖方法中使用异步?我找不到以这种方式进行操作的任何参考。 Hub 类似乎没有定义任何异步方法 docs.microsoft.com/en-us/previous-versions/aspnet/… 。我有一种感觉,你永远不会向基类返回任何东西,因此上下文中没有Request。文档显示需要返回对基类方法return base.OnConnected();的调用。
  • 从您提供的示例来看,您实际上并没有覆盖 Hub 类中的任何方法。除非我在文档或 API 参考中遗漏了一些东西。事实上,看起来不会有任何东西会被发送回客户端。我建议再次查看文档并检查 API 参考以查看 Hub 类中定义的方法,以便您可以正确覆盖它们并完成返回客户端的循环。

标签: .net-core signalr signalr-hub


【解决方案1】:

我找到了解决办法

  1. Hub&lt;IHubClients&gt; 继承ConnectionHub
  2. 使用Context.GetHttpContext().Request获取请求对象

所以 ConnectionHub 类将如下所示:

 public class ConnectionHub: Hub<IHubClients>
    {
        public ConnectionHub()
        {
        }
        public override async Task OnConnectedAsync()
        {
            //get userName, token and other stuff
            var userName = Context.GetHttpContext().Request.Query["userName"];
            await base.OnConnectedAsync();
        }
        public override async Task OnDisconnectedAsync(Exception exception)
        {
            await base.OnDisconnectedAsync(exception);
        }
    }

【讨论】:

  • GetHttpContext 在这里不存在,我错过了什么吗?使用最新的 SignalR.Core 1.1.0
猜你喜欢
  • 2021-05-10
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
相关资源
最近更新 更多