【发布时间】:2018-11-17 19:55:22
【问题描述】:
鉴于以下 .Net Core 2.1 控制台应用程序...
using System;
using System.Diagnostics;
using System.Net.Http;
using System.Net.Http.Headers;
namespace TestHttpClient
{
class Program
{
static void Main(string[] args)
{
try
{
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string url = "https://jsonplaceholder.typicode.com/posts/1";
var response = httpClient.GetAsync(url).Result;
string jsonResult = response.Content.ReadAsStringAsync().Result;
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
}
}
}
}
对 GetAsync 的调用挂起并引发异常并显示以下消息:
System.Net.Http.HttpRequestException:连接尝试失败 因为连接方在一段时间后没有正确响应 时间,或建立连接失败,因为连接的主机有 未能响应---> System.Net.Sockets.SocketException: A 连接尝试失败,因为连接方没有正确 一段时间后响应,或建立连接失败 因为连接的主机没有响应
但是,切换到 .Net Core 2.0 并且它工作正常...
注意
我尝试过使用:
HttpClientFactory -> Same result
WebRequest -> Same result
想法?
更新 1 这在不在公司网络上时有效,这可能意味着代理行为的改变。但是,core2.0 仍然可以正常工作,因此试图找出差异。
更新 2 貌似引入了一个bug,被举报了……
https://github.com/dotnet/corefx/issues/30166#issuecomment-395489603
【问题讨论】:
-
一种选择是使用新的 HttpClientFactory,它是 HttpClient 上的升级/补丁(重新制作并解决了 httpClient 的问题)。看看这个stevejgordon.co.uk/introduction-to-httpclientfactory-aspnetcore
-
我也尝试过使用 HttpClientFactory,结果相同。还尝试了旧的 WebRequest,结果相同
-
我试过异步,没有帮助。为了简单起见,我把它省略了。
-
刚刚尝试了“jsonplaceholder.typicode.com/posts/1”。也无法连接..重试,第三次成功。
-
嘿@Jim 我不知道它是否有帮助,但 Scott H. 提到了一些关于 2.1 中偶尔发生的 HttpRequestException .. 你可能想看看它.. 不知道它是否真的对你有帮助..hanselman.com/blog/…
标签: c# .net .net-core asp.net-core-2.1 .net-core-2.1