我正在为我的.NET项目使用Azure *SignalR作为Hub。
另一方面,我使用React应用作为客户端。在脚本中,我向HubConnectionBuilder类添加了一些自定义头。当连接客户端<->hub正在建立时,头就不见了。自定义头在到达服务器时消失了,所以当我试图从Hub端的OnConnectedAsync方法中的头获取一些数据时,它们就不存在了。
值得一提的是:
- 如果作为客户端,我使用.NET应用程序或Node脚本,则一切正常
- 当使用正常的SignalR(而不是Azure资源)时,一切都可以再次正常工作。
- 如果强制React应用使用长池,
- 在Azure SignalR资源中更改服务模式
- 以不同的方式添加不同的标题
- 使用不同的服务器SignalR选项
- 客户端(React)代码:*
const connection= new HubConnectionBuilder()
.withUrl(HUB_URL, {
accessTokenFactory: () => getToken(),
headers: deviceId && {
deviceId: deviceId
}
})
.withAutomaticReconnect()
.build();
connection.start()
字符串
- 集线器代码 *
public override Task OnConnectedAsync()
{
const string headerDeviceIdKey = "deviceId";
var headers = Context.GetHttpContext().Request.Headers;
if (headers.ContainsKey(headerDeviceIdKey))
{
//...
}
return base.OnConnectedAsync();
}
型
编辑:
- v1..NET应用托管在Azure上,但在本地运行应用并连接到Azure资源时出现相同的问题。
1条答案
按热度按时间vuktfyat1#
的数据
每个HTTP请求发送的标头字典。**在浏览器中发送标头不适用于 WebSockets 或 ServerSentEvents 流。
官方文档:配置其他选项
理由
1.这是浏览器的限制,而不是SignalR可以修复的。
2. SignalR typescript client fails to add custom headers