【发布时间】:2018-05-07 01:22:29
【问题描述】:
我看到几个关于核心 2.0 的问题,关于如何使 HttpClient 使用系统上配置的默认代理。但没有找到正确的答案。发布此问题,希望可能遇到此问题的人现在可能已经找到解决方案。
在 .net 框架版本中,我在 web.config 中使用了以下配置,它对我有用。
<system.net>
<defaultProxy useDefaultCredentials="true"></defaultProxy>
</system.net>
但在 .net core 2.0 中,我从公司的 Intranet 向外部 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();
}
}
如果有人有兴趣了解我是如何找到代理服务器的,我在 .net 4.0 中编写了以下代码并找出了使用的代理。
var proxy = WebRequest.GetSystemWebProxy();
var url = proxy.GetProxy(new Uri("http://google.com"));
谢谢
【问题讨论】:
标签: c# asp.net-core-2.0