HttpClientHandler不包含DefaultProxyCredentials的定义

dev*_*per 6 .net c# dotnet-httpclient .net-core

我正在使用以下代码从使用.Net Core 2.0的API获取数据。

        using (var handler = new HttpClientHandler() { DefaultProxyCredentials = CredentialCache.DefaultCredentials })
        {
            handler.PreAuthenticate = true;
            using (var client = new HttpClient(handler))
            {
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
                var response = await client.GetAsync(url);
            }
        }
Run Code Online (Sandbox Code Playgroud)

但是,我需要将项目转换为.Net Framework 4.6.1,并且.Net Framework 4.6.1中没有DefaultProxyCredentials属性。

https://docs.microsoft.com/zh-cn/dotnet/api/system.net.http.httpclienthandler.defaultproxycredentials

.NET Framework 4.6.1(不使用配置文件)中的DefaultProxyCredentials等效项是什么?

更新:我尝试将代码更改为以下内容:

using (var handler = new HttpClientHandler() { Proxy = WebRequest.DefaultWebProxy})
{
}
Run Code Online (Sandbox Code Playgroud)

它可以工作,但会随机引发407-“需要代理身份验证”错误。

Pan*_*vos 6

为什么你的目标是 4.6 而不是 4.7.2?这很重要,可能会导致 NuGet 依赖地狱。


看起来您正在使用 4.6 中包含的(非常)旧的 HttpClient 类,而不是System.Net.Http包。旧的实现甚至不使用新的套接字处理程序。该HttpClientHandler.DefaultProxyCredentials在.NET 4.7.1添加属性。

  • 最好的选择可能是针对最新的 .NET 版本,或至少 4.7.1,并使用您现在所做的相同代码。更好的是,目标 4.7.2 以避免在下一个选项中解释的依赖垫片地狱。
  • 你可以只添加包。它与 .NET Core 项目中使用的 .NET Standard 2.0 包相同。缺点是 4.6.1 与.NET Standard 2.0并不真正兼容,并且需要多个兼容库。由于版本相互冲突,升级很容易导致依赖地狱。.NET 团队承认,试图改造 .NET Standard 2.0 合规性是一个坏主意

虽然 NuGet 认为 .NET Framework 4.6.1 支持 .NET Standard 1.5 到 2.0,但在使用为 .NET Framework 4.6.1 项目中的这些版本构建的 .NET Standard 库时存在一些问题。对于需要使用此类库的 .NET Framework 项目,我们建议您将项目升级到 .NET Framework 4.7.2 或更高版本。

到过那里。有生产崩溃报告来证明这一点。以及删除所有以前的垫片以摆脱版本冲突的高级 1 天升级体验。Several issues的确

  • 设置默认代理的 Credentials 属性
    WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
Run Code Online (Sandbox Code Playgroud)