【问题标题】:SignalR Android and HeadersSignalR Android 和标头
【发布时间】:2015-03-25 05:34:09
【问题描述】:

我曾经使用 HTTP 标头将一些身份验证数据从我的 SignalR 客户端 (Android) 传递到我们的 SignalR。

更新我的项目以使用来自 GitHub 的最新源代码后,此技术已停止工作。

经过一番研究,我注意到这是因为使用的新默认传输是 websocket,而 websocket 不允许我们使用 Http Headers。

所以,

  1. 有什么方法可以将 HTTP 标头与 SignalR 和 WebSockets 传输一起使用?
  2. 如果不是,我如何将一些参数传递给我的服务器?除了使用 QueryStrings 之外,还有其他选择吗?

谢谢!

【问题讨论】:

    标签: android signalr signalr-hub


    【解决方案1】:

    一般而言,您应该能够在客户端中设置标头,并且应该在打开 websocket(连接请求)时将它们发送到服务器。不确定您使用的是什么客户端,但这在使用 C# 客户端时是可能的。但是,与其他传输方式不同,使用 websockets 时发送或接收消息不需要创建新的 HTTP 请求,因此如果您在打开 websocket 后设置标头,它们将不会被发送到服务器,直到下次客户端必须在客户端需要重新连接或连接停止时发送 HTTP 请求。 另一种选择(如果您的客户端不支持 websockets 的标头)是使用查询字符串发送参数。在服务器端,您可以使用 HubCallerContext.Request 属性获取请求,该属性允许您访问这样的查询字符串(您也可以以相同的方式读取 cookie):

    Context.Request.QueryString

    同样,只有在客户端发出 HTTP 请求时,查询字符串才会发送到服务器,如果连接建立后的 websockets 会在连接重新连接或停止时发生。

    最后,您已经与服务器建立了连接,因此也许您可以使用此连接发送参数,无论您使用何种传输方式,该连接都应该有效。

    【讨论】:

      猜你喜欢
      • 2022-12-19
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 2017-10-31
      相关资源
      最近更新 更多