首页 > 解决方案 > 无法在 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 请求实例没有我上面设置的授权标头!我的代码有什么问题?

标签: httpclient.net-core-3.1

解决方案


AuthenticationHeaderValue 应该这样设置:

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

来源:https ://docs.microsoft.com/en-us/dotnet/api/system.net.http.headers.authenticationheadervalue.-ctor?view=netcore-3.1#System_Net_Http_Headers_AuthenticationHeaderValue__ctor_System_String_


推荐阅读