首页 > 解决方案 > .NET HttpClient 在非控制台应用程序中不会超时

问题描述

我需要在防火墙后面的网络中运行 ASP.NET WebAPI (.NET Framework 4.6.1) 应用程序,并且我需要调用一些托管在该网络之外的 API。我可以在同一台机器上使用 Postman 访问这些 API,没有任何问题,但是 HTTP 客户端 GetAsync 方法超时并失败。

我已经使用 Visual Studio 模板创建了多个应用程序,并将以下代码放入其中(基本上没有什么期望模板代码和以下行):

 var c = new HttpClient();
 var r = await c.GetAsync("https://google.com");

上面的代码适用于 .NET Framework 4.6.1 控制台应用程序,但在所有其他应用程序类型上都失​​败,包括:

我还尝试使用下面的代码绕过 SSL 证书,但没有任何运气。

httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };

肯定是网络上的某些东西导致了这种情况,但是,这是如何在 .NET Framework 而不是任何其他框架中工作的呢?我已经厌倦了像 google.com 这样的公共网站,我得到了同样的结果。有没有人遇到同样的问题?关于如何调试它的任何建议?

标签: c#asp.netdotnet-httpclient

解决方案


我可以找到 .NET Framework Web 应用程序的解决方案。通过将以下添加到 web.config,将设置默认代理。

<system.net>
   <defaultproxy/>
<system.net>

参考: 配置超文本传输​​协议 (HTTP) 代理服务器

但我还没有适用于 .NET Core 应用程序的有效解决方案。

2020 年4 月 9 日更新
我可以在 .NET Core 2.x 中修复此问题,但设置配置但此问题在 .NET Core 3.x 中已修复。现在 HttpClient 默认使用默认代理。


推荐阅读