SignalR Android和Headers

时间:2015-03-21 18:41:36

标签: android signalr signalr-hub

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

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

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

所以,

  1. 有没有办法使用带有SignalR和WebSockets传输的HTTP标头?
  2. 如果不是,我怎么能将一些参数传递给我的服务器?除了使用QueryStrings还有其他选项吗?
  3. 谢谢!

1 个答案:

答案 0 :(得分:2)

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

Context.Request.QueryString

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

最后,您已经与服务器建立了连接,因此您可以使用此连接发送参数,无论您使用何种传输方式,该连接均应正常工作。