我正在使用以下代码从使用.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);
}
}
但是,我需要将项目转换为.Net Framework 4.6.1,并且.Net Framework 4.6.1中没有DefaultProxyCredentials属性。
.Net Framework 4.6.1(不使用配置文件)中的DefaultProxyCredentials等效于什么?
更新:我尝试将代码更改为以下内容:
using (var handler = new HttpClientHandler() { Proxy = WebRequest.DefaultWebProxy})
{
}
它可以工作,但会随机抛出407-“需要代理身份验证”错误。
答案 0 :(得分:5)
为什么要定位4.6而不是4.7.2?这很重要,并且可能导致NuGet依赖地狱。
您似乎正在使用4.6中包含的(非常)旧的HttpClient类,而不是System.Net.Http包。那个旧的实现甚至没有使用新的套接字处理程序。 HttpClientHandler.DefaultProxyCredentials属性是在.NET 4.7.1中添加的。
虽然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
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
答案 1 :(得分:0)
HttpClientHandler中有一个名为Credentials的ICredentials接口。所以:
using (var handler = new HttpClientHandler()
{ Credentials = CredentialCache.DefaultCredentials }) {}