首页 > 解决方案 > HttpClient Get 或 Post 不适用于 .NETCore 2.1 和 2.2,但适用于 .NETCore 2.0

问题描述

我使用 Visual Studio 2017 v15.9.4、.NET Standard 2.0.3 和最新版本的 .NETCore 2.1.6。我在 Windows 10 64 位上运行我的应用程序。

这段代码:

 using (HttpClient client = new HttpClient())
            {
                try
                {
                    var response = await client.GetAsync("http://httpbin.org/")
                ...

不适用于 .NET Core 2.1 或 2.2 的最新版本。我有这个例外:

Result StackTrace:  
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at EliorNugetCommon.Tests.APIManagerTests.Get() in D:\Git\Elior-Group\WebApiServices\NugetWAS\EliorNugetCommon\EliorNugetCommon.Tests\APIManagerTests.cs:line 50
----- Inner Stack Trace -----
Result Message: 
System.AggregateException : One or more errors occurred. (A task was canceled.)
---- System.Threading.Tasks.TaskCanceledException : A task was canceled.

但是,这适用于 .NET Core 2.0.9 !

谢谢您的帮助。

标签: visual-studio-2017asp.net-core-2.1

解决方案


使用 .NET Core 和 .NET Core 2.2 中的新 HTTP 堆栈,代理背后的身份验证出现回归。在这种情况下,我们可以使用 .NET Core 2.0 HTTP 堆栈这个开关:

AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);

欲了解更多信息,讨论在这里:https ://github.com/dotnet/corefx/issues/30166


推荐阅读