SignalR Android 和 Headers

SignalR Android and Headers

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

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

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

所以,

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

谢谢!

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

Context.Request.QueryString

同样,如果客户端正在发出 HTTP 请求,查询字符串将仅发送到服务器,对于建立连接后的 websockets,这发生在连接重新连接或正在停止时。

最后,您已经连接到服务器,所以也许您可以使用此连接发送您的参数,无论您使用何种传输方式,它都应该可以正常工作。