HttpClient 发送授权承载为空

HttpClient send Authorization bearer empty

在 Startup class 中,我使用 AddHttpClient 方法获取 jwt 令牌(使用 MSAL)并将其分配给 DefaultRequestHeaders.Authorization:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", response.AccessToken);

accessToken我在Postman中使用过,以后在may代码中使用时有效

在调用 API 的代码中,我使用 IHttpClientFactory:

解析了一个 HttpClient
var httpClient = _httpClientFactory.CreateClient("client");

然后试着打电话给我的 API。调用失败并显示 401 并查看 HttpRequestMessage,我看到授权 Header 存在但参数为空:

如果我构建第二个 HttpClient 并从使用 IHttpClientFactory 构建的 HttpClient 分配授权 header,调用工作就像一个魅力:

var httpClient2 = new HttpClient();
httpClient2.DefaultRequestHeaders.Authorization = httpClient.DefaultRequestHeaders.Authorization;

// This call fails
var response = await httpClient.GetAsync("Game/All", cancellationToken);
// This call succeed
response = await httpClient2.GetAsync("Game/All", cancellationToken);

我的代码有什么问题? IHttpClientFactory 提供的 HttpClient 没有明显相同的行为,但为什么?

好的,我找到了问题,这是由于 my-me-from-past。

稍后在我的代码中,我用 HttpMessageHandler 注册了相同的 HttpClient(同名),负责在每次调用之前填写授权 header令牌。

由于工作尚未完成,处理程序用空字符串填充 header。

执行了两个HttpClient配置,最后一个说了算...