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
配置,最后一个说了算...
在 Startup class 中,我使用 AddHttpClient 方法获取 jwt 令牌(使用 MSAL)并将其分配给 DefaultRequestHeaders.Authorization:
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", response.AccessToken);
accessToken我在Postman中使用过,以后在may代码中使用时有效
在调用 API 的代码中,我使用 IHttpClientFactory:
解析了一个 HttpClientvar 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
配置,最后一个说了算...