websocket Azure SignalR缺少自定义标头

pnwntuvh  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(226)

我正在为我的.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资源时出现相同的问题。
vuktfyat

vuktfyat1#


的数据
每个HTTP请求发送的标头字典。**在浏览器中发送标头不适用于 WebSocketsServerSentEvents 流。
官方文档:配置其他选项

理由

1.这是浏览器的限制,而不是SignalR可以修复的。
2. SignalR typescript client fails to add custom headers

相关问题