【问题标题】:Error when making request with HttpClient via xunit integration test通过 xunit 集成测试向 HttpClient 发出请求时出错
【发布时间】:2022-01-05 15:13:37
【问题描述】:

我有一个包含在标准 .net 类库中的自定义类,它使用 HttpClient 向外部面向公众的 api 发出请求。

当我通过标准 .net 控制台应用实例化类并调用方法时,会返回预期的结果。

但是,通过 Xunit 测试执行相同的代码会产生以下异常:

'底层连接已关闭:发送时发生意外错误。'

无法从传输连接读取数据:现有连接被远程主机强行关闭。

测试项目和类库项目框架都是.Net Standard 4.8。

大多数在线示例都使用 WebApplicationFactory,记录在 here。 就我而言,我没有使用 ASP Core,也无法使用此类。

我在 xunit 方面没有那么丰富的经验,并且错误消息中没有详细说明为什么会发生这种情况。

为了尝试隔离问题,我尝试直接在测试方法中运行这段代码,但发生了相同的错误。

非常感谢任何建议/解决方法。

using (HttpClient httpClient = new HttpClient())
{
    var request = new HttpRequestMessage()
        {
            Method = HttpMethod.Get,
            RequestUri = endpoint
        };
     
        request.Headers.Add("api-key", key);
        using (HttpResponseMessage response = httpClient.SendAsync(request).Result)
        {
            var rawResponse = response.Content.ReadAsStringAsync().Result;
                var response = JsonConvert.DeserializeObject<CustomResponse>(rawResponse);
        }
}

【问题讨论】:

  • 在调用 api 之前是否检查过是否提供了有效的端点?
  • 是的,传递的参数与我在控制台应用程序中使用的完全相同。从控制台应用程序执行时它可以工作,从单元测试执行它失败。即使在方法本身中对端点和键值进行硬编码。

标签: c# asp.net .net xunit.net


【解决方案1】:

感谢post,我解决了这个问题

在请求生效之前添加 TLS 1.1 和 1.2

ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2021-11-04
    • 2020-08-22
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多