.net core ';HubCallerContext';不包含';请求';singnalr.netcore

.net core ';HubCallerContext';不包含';请求';singnalr.netcore,.net-core,signalr,signalr-hub,.net Core,Signalr,Signalr Hub,我正在使用.NETCore3.0和Angular 8的信号器 public class ConnectionHub : Hub { public ConnectionHub() { } public override async Task OnConnectedAsync() { //get userName, token and other stuff await base.OnConnectedAsync();

我正在使用.NETCore3.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");
            });
我想访问在查询参数中发送的自定义数据,但在OnConnectedAsync中,上下文如下所示:

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

我找到了解决方案

  • 使用
    Hub继承
    ConnectionHub
  • 使用
    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);
            }
        }
    
    公共类连接集线器:集线器
    {
    公共连接中心()
    {
    }
    公共覆盖异步任务OnConnectedAsync()
    {
    //获取用户名、令牌和其他内容
    var userName=Context.GetHttpContext().Request.Query[“userName”];
    等待base.OnConnectedAsync();
    }
    公共覆盖异步任务OnDisconnectedAsync(异常)
    {
    等待base.OnDisconnectedAsync(异常);
    }
    }
    
    我找到了解决方案

  • 使用
    Hub继承
    ConnectionHub
  • 使用
    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);
            }
        }
    
    公共类连接集线器:集线器
    {
    公共连接中心()
    {
    }
    公共覆盖异步任务OnConnectedAsync()
    {
    //获取用户名、令牌和其他内容
    var userName=Context.GetHttpContext().Request.Query[“userName”];
    等待base.OnConnectedAsync();
    }
    公共覆盖异步任务OnDisconnectedAsync(异常)
    {
    等待base.OnDisconnectedAsync(异常);
    }
    }
    
    Hub
    类的重写方法中是否有使用异步的参考?我找不到以这种方式做这件事的任何参考资料。
    Hub
    类似乎没有定义任何异步方法。我有一种感觉,您从未向基类返回任何内容,因此上下文中没有
    请求。文档显示您需要返回对基类方法的调用
    return base.OnConnected()。从您提供的示例来看,我看起来并不是在重写
    Hub
    类中的任何方法。除非我在文档或API参考中遗漏了什么。事实上,看起来任何东西都不会被发送回客户机。我建议再次查看文档并检查API引用,以查看
    Hub
    类中定义的方法,这样您就可以正确地重写它们并完成返回到客户端的循环。您是否有在
    Hub
    类的重写方法中使用async的参考?我找不到以这种方式做这件事的任何参考资料。
    Hub
    类似乎没有定义任何异步方法。我有一种感觉,您从未向基类返回任何内容,因此上下文中没有
    请求。文档显示您需要返回对基类方法的调用
    return base.OnConnected()。从您提供的示例来看,我看起来并不是在重写
    Hub
    类中的任何方法。除非我在文档或API参考中遗漏了什么。事实上,看起来任何东西都不会被发送回客户机。我建议您再次查看文档并检查API引用,以查看
    Hub
    类中定义的方法,这样您就可以正确地重写它们并完成返回客户机的循环。