首页 > 解决方案 > 如何将自定义标头添加到 SignalR 的 Typescript 客户端?

问题描述

我正在尝试在标头中传递不记名令牌以授权客户端连接。SignalR 集线器通过从标头中获取不记名令牌来授权客户端。我无法修改 SingalR 集线器代码以使用查询字符串来获取令牌,也无法使用内置的 JWT 令牌功能。

如何将自定义标头添加到 SignalR 打字稿客户端?

我唯一能想到的就是覆盖 HttpClient 以添加标题,但是我不确定这是否可行或如何做到这一点。

我在 Angular 8 中使用 @microsoft/signalr 和最新的 @microsoft/signalr 包。

标签: c#angulartypescriptsignalr

解决方案


您可以在构建连接时在选项中添加自定义 HttpClient。

它看起来像这样:

class CustomHttpClient extends DefaultHttpClient {
  public send(request: HttpRequest): Promise<HttpResponse> {
    request.headers = { ...request.headers, "customHeader": "value" };
    return super.send(request);
  }
}

let hubConnection = new HubConnectionBuilder()
    .withUrl(url, { httpClient: new CustomHttpClient() })
    .build();

可以从调用 DefaultHttpClient 的发送中继承DefaultHttpClient和在发送中,因此您不需要自己实现 Http 调用。

headers已通过属性在@microsoft/signalr 包的 5.0 或更高版本中实现了一流的支持,有关已解决的 GitHub 问题IHttpConnectionOptions,请参阅https://github.com/dotnet/aspnetcore/issues/14588


推荐阅读