我正在将 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();
}
编辑: