我曾经使用HTTP Headers将一些身份验证数据从我的SignalR Client(Android)传递到SignalR。
在更新我的项目以使用GitHub的最新源代码后,此技术已停止工作。
经过一番研究后,我注意到这是因为使用的新默认传输是websocket,而websocket不允许我们使用Http Headers。
所以,
谢谢!
答案 0 :(得分:2)
通常,您应该能够在客户端中设置标头,并且应该在打开websocket时将它们发送到服务器(连接请求)。不确定您使用的是哪个客户端,但是当使用C#客户端时,这是可能的。但是,与其他传输相反,使用websockets时发送或接收消息不需要创建新的HTTP请求,因此如果在websocket打开后设置头文件,他们将无法发送到服务器,直到下次客户端必须发送HTTP请求,该请求是客户端需要重新连接或连接停止时。
另一个选项(如果您的客户端不支持websockets标头)是使用查询字符串发送参数。在服务器端,您可以使用HubCallerContext.Request
属性获取请求,该属性允许您像这样访问查询字符串(您也可以以相同的方式读取cookie):
Context.Request.QueryString
同样,如果客户端发出HTTP请求,查询字符串将仅发送到服务器,如果在建立连接后出现websockets,则在连接重新连接或正在停止时发生。
最后,您已经与服务器建立了连接,因此您可以使用此连接发送参数,无论您使用何种传输方式,该连接均应正常工作。