httpclient - 无法在 HttpClient 中设置授权标头(.Net core 3.1)
问题描述
我正在从 .net core 2.2 迁移到 3.1。我正在制作一个 XUnit 测试方法来测试我的控制器。我在 .net core 2.2 项目中成功制作和测试,但在迁移到 3.1 后,它似乎无法为我的请求设置授权标头,所以我从我的应用程序中获得了 UnAuthorized。
这是我的代码:
[Fact]
public async void InvalidId_UnSuccessFull_GetById()
{
// Arrange
var httpClient = new HttpClient();
var token = await GetAdminAccessToken(); // Sends a login request and fetch a valid token
// httpClient.DefaultRequestHeaders.Add("Authorization",$"Bearer {token}");
httpClient.DefaultRequestHeaders.Authorization=new AuthenticationHeaderValue("Authorization",$"Bearer {token}");
var id = Guid.Empty;
// Act
var response = await httpClient.GetAsync("localhost:5000/Admin/User/{id}");
var message = await ExtractMessage(response);
// Assert
Assert.Contains(PersianErrorMessage.InvalidUserId, message);
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
}
我调试到 httpClient 类,直到 sendAsync 方法和 HttpRequestMessage 请求实例没有我上面设置的授权标头!我的代码有什么问题?
解决方案
AuthenticationHeaderValue 应该这样设置:
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);