为什么我通过 HttpClient 调用 API 时服务器超时,但 Postman 没问题?

Why do I get a server timeout calling an API via HttpClient but Postman is fine?

我正在尝试向 RESTful 服务发出 GET 请求,但是 .NET HttpClient 收到超时,但是通过 Postman 这个 returns 是预期的秒内响应(错误响应,因为我还没有“登录”)。

我尝试过的:

  1. 我已经检查过这些 URL 是一样的。
  2. 我想也许 Postman 的自动 headers 是问题所在,但在 HttpClient 中设置这些后,我仍然收到超时。
  3. 如果我增加 HttpClient 上的超时,我仍然会从服务器 ((504) Gateway Timeout) 上收到超时。
Client = new HttpClient(new HttpClientHandler()
{
    AutomaticDecompression = System.Net.DecompressionMethods.GZip
});
var objTask = Client.GetStringAsync(objUrl);
objTask.Wait();
strResponse = objTask.Result;
strResponse = Client.GetStringAsync(objUrl).Result;

为什么我通过 HttpClient 收到超时?

注:

我们的 WebApi 正在调用我们的 WCF 服务,后者又通过 HttpClient 调用第三方 RESTful 服务---出于安全原因,我不能直接从中调用第三方 API我们的 WebApi 控制器。网站基于.NET 4.0 Framework。

在@jdweng 和@gunr2171 的大量帮助下,我意识到问题是由于存储在自托管 WCF 服务 App.Config 中的代理造成的。如果我将其注释掉,我就不会遇到超时问题。

HttpClient 构造函数可以接受一个 HttpClientHandler,其中有一个 Proxy 属性,您可以在其中绕过本地代理:

return new HttpClient(new HttpClientHandler()
{
    AutomaticDecompression = System.Net.DecompressionMethods.GZip,
    Proxy = new WebProxy()
    {
        BypassProxyOnLocal = true
    }
})
{
    BaseAddress = new Uri("https:\my.service")
};