【发布时间】:2019-05-02 04:02:47
【问题描述】:
我需要在防火墙后面的网络中运行 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 这样的公共网站,我得到了同样的结果。 有没有人遇到同样的问题?关于如何调试它的任何建议?
【问题讨论】:
-
您收到的确切错误是什么?它总是在一段时间后发生还是会有所不同?增加超时是否有意义?您希望收到多少数据? Postman 运行这些请求需要多长时间?
-
我的疯狂猜测是,您正在以自己的身份运行控制台应用程序,但将 Web 应用程序作为某种服务帐户身份运行,并且该身份缺少配置的某个方面,例如它无权访问出站代理服务器或连接所需的根证书。但这只是一个猜测。这里没有太多的信息。
-
邮递员的响应只有几毫秒。我真的在尝试 google.com,连接速度非常快。
-
@JohnWu 我还没有托管这个应用程序。 .net 核心也是一个控制台应用程序,但它失败了。
-
@mason 错误信息为:“连接尝试失败,因为连接方在一段时间后没有正确响应或建立的连接失败,因为主机没有响应”
标签: c# asp.net dotnet-httpclient