.NET Core 3.0 Blazor WebAssembly客户端HubConnection无Headers属性如何添加令牌
Blazor WebAssembly .NET Core 3.0 SignalR HubConnection添加请求头方案
.NET Core 3.0版本的SignalR客户端未直接暴露HubConnection.Headers属性,所有请求头相关配置需要在构建HubConnection实例阶段通过HubConnectionBuilder完成:
场景1:添加授权令牌(最常用)
直接使用内置的AccessTokenProvider配置即可,框架会自动将令牌注入Authorization请求头,适配SignalR服务端的授权校验规则:
// 提前注入INavigationManager、你使用的令牌存取服务(比如localStorage封装、IAccessTokenProvider等) var hubConnection = new HubConnectionBuilder() .WithUrl(NavigationManager.ToAbsoluteUri("/你的Hub路由"), options => { options.AccessTokenProvider = async () => { // 替换为你实际的令牌获取逻辑 var token = await localStorage.GetItemAsync<string>("你的授权令牌存储key"); return token; }; }) .Build();
场景2:添加自定义非授权请求头
需要自定义DelegatingHandler注入自定义头,再通过HttpMessageHandlerFactory注册到配置中:
- 先实现自定义请求头处理类
public class CustomHeaderHandler : DelegatingHandler { private readonly Dictionary<string, string> _headers; public CustomHeaderHandler(HttpMessageHandler innerHandler, Dictionary<string, string> headers) { InnerHandler = innerHandler; _headers = headers; } protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { foreach (var (key, value) in _headers) { request.Headers.TryAddWithoutValidation(key, value); } return await base.SendAsync(request, cancellationToken); } }
- 在构建HubConnection时注册处理类
var customHeaders = new Dictionary<string, string> { {"自定义头key1", "自定义头value1"}, {"自定义头key2", "自定义头value2"} }; var hubConnection = new HubConnectionBuilder() .WithUrl(NavigationManager.ToAbsoluteUri("/你的Hub路由"), options => { options.HttpMessageHandlerFactory = innerHandler => new CustomHeaderHandler(innerHandler, customHeaders); }) .Build();
注意:.NET Core 3.0版本不支持HubConnection构建完成后动态修改请求头,所有头配置必须在构建阶段完成。
内容的提问来源于stack exchange,提问作者mz1378
相关产品推荐
相关产品推荐

