我有一个程序,可以发出Post请求。该项目运行良好,但是使用.NETCORE
(1.1)的旧版本,我已将包括框架在内的所有内容都升级到了2.1
。从未如此更改过代码,没有错误发生,并且看起来可以更改。
现在我的发帖请求失败了(我将仅附加一个,但我有大约4个发帖请求,其中每个人都出于相同的原因而失败)
编辑:我也测试了我的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
错误消息是:
尝试失败是因为一段时间后连接方未正确响应,或者是由于连接的主机未能响应而建立的连接失败
我尝试谷歌搜索此错误,但是每篇帖子似乎对我来说都不是问题。.他们在谈论权限防火墙和端口,但是为什么它在一个项目中起作用而在另一个项目中不起作用?< / p>
如果我尝试通过邮递员/我的1.1版本项目备份,则可以使用。
为什么会这样?什么坏了?我可能需要添加超时属性吗?
答案 0 :(得分: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 SocketsHttpHandler proxy authentication using Windows auth is broken #30166