【问题标题】:Signalr - Can't read query strings on serverSignalr - 无法读取服务器上的查询字符串
【发布时间】:2017-02-03 00:01:10
【问题描述】:

我快疯了。我做了chatHub教程,一切正常。我连接到服务器。我可以向每个客户广播一条消息。

然后我尝试添加查询字符串,因为我想获得一些关于我的用户的信息,因为许多用户可以在同一个会话中连接。

这是我的javascript

(function ($) {
            // Declare a proxy to reference the hub.
            var chat = $.connection.chatHub;
            //chat.state.userName = "test";
            //chat.qs = "userToken3=blablabla";
            chat.qs = { 'uid' : '2541fdsf862d' };
            //$.connection.chatHub.qs = {"userToken2" : 125457};
            // Create a function that the hub can call to broadcast messages.
            chat.client.broadcastMessage = function (name, message) {
                // Html encode display name and message.
                var encodedName = $('<div />').text(name).html();
                var encodedMsg = $('<div />').text(message).html();
                // Add the message to the page.
                $('#discussion').append('<li><strong>' + encodedName
                    + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>');
            };
            // Get the user name and store it to prepend to messages.
            //$('#displayname').val(prompt('Enter your name:', ''));
            // Set initial focus to message input box.
            $('#message').focus();
            // Start the connection.
            $.connection.hub.start({ 'uid': '2541fdsf862d' }).done(function () {
                $('#sendmessage').click(function () {
                    // Call the Send method on the hub.
                    chat.server.send("user", $('#message').val());
                    // Clear text box and reset focus for next comment.
                    $('#message').val('').focus();
                });
            });
        })(jQuery);

如果我在此函数中设置断点时查看我的监视列表,我可以看到查询字符串“uid”已完美设置。

但是在服务器上,我无法读取参数。

public override Task OnConnected()
{
    string name = Context.User.Identity.Name;
    var caller = Clients.Caller;
    var username = Clients.Caller.userName; 
    var queryString = Context.Request.QueryString;
    var queryString2 = Context.QueryString;
    var uid = Context.QueryString["uid"];
    _connections.Add(name, Context.ConnectionId);

    return base.OnConnected();
}

在这种情况下,uid 为空。如果我查看服务器上的发送方法:

[Authorize]
public void Send(string name, string message)
{
    // Call the broadcastMessage method to update clients.
    Clients.All.broadcastMessage(name, message);
    var queryString = Context.Request.QueryString;
    var context = Context;
}

uidqueryString 变量中不可用。

我的代码有什么问题?有人知道吗?

【问题讨论】:

    标签: c# asp.net asp.net-mvc signalr


    【解决方案1】:

    我刚刚找到了解决方案。这是因为我必须通过$.connection.hub 而不是chat.qs 传递查询字符串

    所以,解决办法是

    $.connection.hub.qs = { 'uid': '2541fdsf862d' };
    

    【讨论】:

      【解决方案2】:

      如果您想从 JavaScript 传递 signalR OnConnect 中的参数,请将它们添加到 connection.qs 属性中。例如

      self.hubConnection = $.hubConnection();
      self.hubConnection.qs = { param1: value, param2: value };
      

      然后在 SignalR Hub 中的 OnConnect 方法中,您可以通过

      检索它们
      var param1 = this.Context.QueryString["param1"];
      var param2 = this.Context.QueryString["param2"];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多