【问题标题】:.NetStandard Http SendAsync Never Returns.NetStandard Http SendAsync 永不返回
【发布时间】:2018-01-11 20:46:51
【问题描述】:

我正在创建一个 NuGet 包以从在线 API 检索图像。我正在使用 .NetStandard 1.4 并使用 System.Net.Http 4.3.2 版。每次我调用 Login 方法来获取访问 api 的令牌时,http 调用永远不会返回,只会挂起,直到由于超时而发生任务取消异常。我已经尝试了多种我在网上找到的解决方案,例如确保在异步调用之前没有 .Result 或 .Wait() 并且我的测试中没有。我也尝试过使用不正确的 url,但调用仍然挂起并且没有返回说 url 不存在。

我在下面发布了主要的 http 调用。非常感谢任何有关此挂起原因的帮助。

HttpRequestMessage requestMessage = new HttpRequestMessage();
requestMessage.RequestUri = new Uri($"{BaseUrl}/login");
requestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(HttpContentType.JSON));
requestMessage.Method = HttpMethod.Post;
requestMessage.Content = new StringContent(JsonConvert.SerializeObject(values), Encoding.UTF8, HttpContentType.JSON);

using (HttpClient httpClient = new HttpClient())
{
    using (HttpResponseMessage response = await httpClient.SendAsync(requestMessage))
    {
        if (response.IsSuccessStatusCode == true)
        {
            // Do work
        }
    }
}

BaseUrl 值和网站路径是正确的,我已经检查过了。我还使用了相同的链接以及我需要在 Postman 中发送的所有信息,以验证我使用的信息是否正确。

我已尝试使用 MSTest、控制台项目和 WPF 项目进行测试,使用按钮和单击事件来触发此方法。每个方法都挂起并且永远不会通过

using (HttpResponseMessage ...

【问题讨论】:

  • 是的,我已经找到了这两个帖子,并尝试了没有运气的解决方案......
  • 你能打http://example.com吗?如果不是,问题可能与HttpClient 无关。可能是服务器没有响应。
  • 我运行你的测试试图点击http://example.com,但它仍然挂在同一个地方。没有变化..
  • 如何调用方法?你怎么知道“工作”永远不会被执行?您能否设置一个新的控制台应用程序来重现此行为?

标签: c# dotnet-httpclient .net-standard-1.4


【解决方案1】:

我不久前就发现了这一点,但它恰好是我路由器上的一个设置。我使用的是 Apple Airport Extreme,并且 IPv6 设置为“自动”。我将其更改为“仅本地链接”,我的所有 HTTP 调用都开始正常工作并且响应速度非常快。

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多