Azure SignalR 缺少自定义标头

问题描述 投票:0回答:1

我正在将 Azure SignalR 用于我的 .NET 项目作为集线器。

另一方面,我使用 React 应用程序作为客户端。在脚本中,我向 HubConnectionBuilder 类添加一些自定义标头。当建立连接客户端<->集线器时,标头就会消失。自定义标头在到达服务器时消失,因此当我尝试从 Hub 端的 OnConnectedAsync 方法中的标头获取一些数据时,它们不在那里。

值得一提的是:

  • 如果作为客户端我使用 .NET 应用程序或节点脚本,一切都会正常工作

  • 使用普通 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 资源时,问题似乎相同。
azure websocket asp.net-core-signalr azure-signalr
1个回答
0
投票

每个 HTTP 请求发送的标头字典。 在浏览器中发送标头不适用于 WebSocketsServerSentEvents 流。

官方文档:配置附加选项

原因

1.这是浏览器的限制,SignalR 无法修复。

2.SignalR typescript 客户端无法添加自定义标头

© www.soinside.com 2019 - 2024. All rights reserved.