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 關注
- 231 瀏覽
添加回答
舉報