我有一个程序,它发出一个 Post 请求。这个项目运行良好,但是使用旧版本的.NETCORE
(1.1(,我已经将包括框架在内的所有内容都升级到2.1
。没有更改代码,没有发生错误,似乎更改还可以。
现在我的 Post 请求失败了(我只会附加一个,但我有大约 4 个 Post 请求,每个请求都因相同原因失败(
编辑:我也刚刚测试了我的 Get 请求,产生相同的错误..
这是我的代码:
using (var client = new HttpClient())
{
Field fld = new Field()
{
...
};
ForJSON bodyFormat = new ForJSON()
{
...
};
string output = JsonConvert.SerializeObject(bodyFormat);
StringContent sc = new StringContent(output, Encoding.UTF8, "application/json");
try
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(
Encoding.ASCII.GetBytes(
string.Format("{0}:{1}", "XX", "YY"))));
response = await client.PostAsync("https:...", sc); // It fails here
错误消息是:
尝试失败,因为连接方在一段时间后未正确响应,或者建立的连接失败,因为连接的主机无法响应
我尝试在谷歌上搜索此错误,但每个帖子似乎都与我无关。他们谈论的是权限防火墙和端口,但为什么它可以在一个项目中工作,而在另一个项目中则不能?
如果我尝试通过邮递员/我使用 1.1 版本备份项目,那么它可以工作.
为什么会这样?什么坏了?是否需要添加超时属性?
尝试失败,因为连接方在一段时间后未正确响应,或者建立的连接失败,因为连接的主机无法响应
对于此错误,它是由核心 1.1和核心 2.1 之间的更改引起的,这些更改HttpClientHandler
从WinHttpHandler
更改为SocketsHttpHandler
。
对于解决方法,您可以尝试将进程配置为使用较旧的 HttpClientHandler
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
using (var client = new HttpClient())
参考:网络性能。
错误跟踪:.NET Core 2.1 套接字使用 Windows 身份验证的 httpHandler 代理身份验证已损坏 #30166