c# - 如何将自定义标头添加到 SignalR 的 Typescript 客户端?
问题描述
我正在尝试在标头中传递不记名令牌以授权客户端连接。SignalR 集线器通过从标头中获取不记名令牌来授权客户端。我无法修改 SingalR 集线器代码以使用查询字符串来获取令牌,也无法使用内置的 JWT 令牌功能。
如何将自定义标头添加到 SignalR 打字稿客户端?
我唯一能想到的就是覆盖 HttpClient 以添加标题,但是我不确定这是否可行或如何做到这一点。
我在 Angular 8 中使用 @microsoft/signalr 和最新的 @microsoft/signalr 包。
解决方案
您可以在构建连接时在选项中添加自定义 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。
推荐阅读
- gitlab - Gitlab 的 autodevops:Herokuish buildpack 测试找不到 chrome 二进制文件
- angular - 如何在生产构建后识别 Angular 给出的以下问题?
- c++ - 加载数据库或发出请求
- django - 无法访问通过 post 传递的数组
- excel - 如何处理生成的列表框并在 VBA 中动态添加项目?
- swift - 我该如何解决:“Errno::ENOENT - 没有这样的文件或目录@rb_sysopen - ”?
- sql - 为什么我在动态 SQL 中的查询不能按预期工作?
- elastic-stack - Beats 如何从 Beats Central Management(即 REST)接收配置更改?
- javascript - 如何在 CKEditor 5 中单向处理视图的 html 数据?
- azure-pipelines - Azure Pipelines API - 获取构建代理信息