3 回答
TA贡献1784条经验 获得超2个赞
因此,显然有一个关于此的错误/重大更改。
这里:https : //github.com/dotnet/corefx/issues/30166 https://github.com/dotnet/corefx/issues/30191
我认为我正在经历两个独立但相关的问题。
但是,我发现似乎是一种解决方法。
using System;
using System.Diagnostics;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
namespace TestHttpClient
{
static class Program
{
static async Task Main(string[] args)
{
try
{
using (var httpClient = new HttpClient(new WinHttpHandler() { WindowsProxyUsePolicy = WindowsProxyUsePolicy.UseWinInetProxy }))
{
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string url = "https://jsonplaceholder.typicode.com/posts/1";
var response = await httpClient.GetAsync(url);
string jsonResult = await response.Content.ReadAsStringAsync();
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
throw;
}
}
}
}
这里的关键部分是使用WinHttpHandler和设置WindowsProxyUsePolicy,以WindowsProxyUsePolicy.UseWinInetProxy
WinHttpHandler通过添加 nuget 包System.Net.Http.WinHttpHandler 找到
TA贡献1943条经验 获得超7个赞
这是 CoreFx 2.1 中的一个更改,导致HttpClient
使用新的HttpClientHandler
. 这可能是您的问题的原因以及降级工作的原因。
您可以通过使用 WinHttpHandler 作为参数实例化 HttpClient、将环境变量设置DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER
为 false 或通过在代码中调用以下内容来使用旧的 HttpHandler :
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
TA贡献1856条经验 获得超17个赞
这是一个著名的“21 秒”超时问题......在 Azure 中,对于很少调用的服务(我的服务正在从 Azure 基础结构调用外部服务)有帮助的是添加:
httpClient.DefaultRequestHeaders.ConnectionClose = true;
- 3 回答
- 0 关注
- 192 浏览
添加回答
举报