c# - .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 控制台应用程序,但在所有其他应用程序类型上都失败,包括:
- ASP.NET Web 应用程序 .NET Framework 4.6.1
- ASP.NET Core Web 应用程序 2.2
- .NET Core 控制台应用程序 2.2
我还尝试使用下面的代码绕过 SSL 证书,但没有任何运气。
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };
肯定是网络上的某些东西导致了这种情况,但是,这是如何在 .NET Framework 而不是任何其他框架中工作的呢?我已经厌倦了像 google.com 这样的公共网站,我得到了同样的结果。有没有人遇到同样的问题?关于如何调试它的任何建议?
解决方案
我可以找到 .NET Framework Web 应用程序的解决方案。通过将以下添加到 web.config,将设置默认代理。
<system.net>
<defaultproxy/>
<system.net>
但我还没有适用于 .NET Core 应用程序的有效解决方案。
2020 年4 月 9 日更新
我可以在 .NET Core 2.x 中修复此问题,但设置配置但此问题在 .NET Core 3.x 中已修复。现在 HttpClient 默认使用默认代理。
推荐阅读
- android - 如何在 ShapeableImageView 上实现点击效果,min api 21 没有嵌套视图
- swift - 我需要刷新 SwiftUI 视图,当 @propertyWrapper 被传递到
- consul - Consul 1.8.4 ui 未按预期加载
- azerothcore - 是否可以让 NPC 仅向具有特定成就的角色提供物品?
- list - 用搜索栏过滤长列表非常慢
- oracle - Oracle 19C - 尝试在 DBMS_LOCK 上授予执行时出错
- json - Receive Json sent from Angular to Laravel
- postgresql - Postges - 多列索引 - 前导(最左边)列
- javascript - 如何同时为所有用户运行 JavaScript 代码并为所有用户显示相同的生成数字
- php - Symfony“未检测到 PHP 二进制文件”