我看到了几个关于如何使HttpClient使用系统上配置的默认代理的核心2.0的问题.但没有找到正确的答案.发布此问题希望可能遇到此问题的人现在可能已找到解决方案.
在.net框架版本中,我在web.config中使用了以下配置,它对我有用.
<system.net>
<defaultProxy useDefaultCredentials="true"></defaultProxy>
</system.net>
Run Code Online (Sandbox Code Playgroud)
但是在.net core 2.0中,我从我公司的内部网向外部api发出Web请求,我的代码失败了407,需要代理身份验证.
经过一些研究后,我认为不可能让你的HttpClient使用IE中通过WPAD配置的默认代理设置.有人可以纠正我的理解吗?
在https://github.com/dotnet/corefx/issues/7037的这个页面上
据说如下:
"HttpClientHandler.UseProxy属性的默认值为true.并且HttpClientHandler.Proxy的默认值为NULL,这意味着使用默认代理."
但我没有观察到这种行为.
更新:
我终于可以通过指定代理服务器地址然后进行HttpClient调用来调用外部web api.仍然想知道如何在IE中使用默认代理设置.
using (var handler = new HttpClientHandler {
Credentials = new System.Net.NetworkCredential(user, password, domain),
UseProxy = true,
Proxy = new System.Net.WebProxy(new Uri("http://xxxxxxx:8080"), true)
})
{
handler.Proxy.Credentials = new NetworkCredential("xxxx", "yyyyy", "cccccc");
using (var httpClient = new HttpClient(handler))
{
var request = new HttpRequestMessage()
{
RequestUri = new Uri(destinationUrl),
Method = HttpMethod.Post
};
request.Content = new StringContent(requestXml, Encoding.UTF8, "text/xml");
HttpResponseMessage response = await httpClient.SendAsync(request);
Task<Stream> streamTask = response.Content.ReadAsStreamAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人有兴趣了解我是如何找到代理服务器的,那么我在.net 4.0中编写了以下代码并找到了使用的代理.
var proxy = WebRequest.GetSystemWebProxy();
var url = proxy.GetProxy(new Uri("http://google.com"));
Run Code Online (Sandbox Code Playgroud)
谢谢
我希望这是您正在寻找的答案:默认代理问题 #28780
如果您只想使用默认系统代理并需要在 HTTP 请求期间将默认凭据传递给该代理(因为该代理是经过身份验证的代理),请执行以下操作:
var handler = new HttpClientHandler();
handler.DefaultProxyCredentials = CredentialCache.DefaultCredentials;
var client = new HttpClient(handler);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4802 次 |
| 最近记录: |