.net core 2.0

时间:2018-05-07 01:22:29

标签: asp.net-core-2.0

我看到有关如何让HttpClient使用系统上配置的默认代理的关于核心2.0的几个问题。但没有找到正确的答案。发布此问题希望可能遇到此问题的人现在可能已找到解决方案。

在.net框架版本中,我在web.config中使用了以下配置,它对我有用。

  <system.net>
    <defaultProxy useDefaultCredentials="true"></defaultProxy>
  </system.net>

但在.net core 2.0中我从我公司的内部网向外部api发出Web请求,我的代码失败了407,需要代理身份验证。

经过一些研究后,我认为不可能让你的HttpClient使用IE中通过WPAD配置的默认代理设置。有人可以在这里纠正我的理解吗?

https://github.com/dotnet/corefx/issues/7037

的此页面上

据说如下:

&#34; HttpClientHandler.UseProxy属性的默认值为true。并且HttpClientHandler.Proxy的默认值为NULL,这意味着使用默认代理。&#34;

但我没有观察到这种行为。

更新

我终于可以通过指定代理服务器地址然后进行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"));

由于

1 个答案:

答案 0 :(得分:0)

我希望这是您要寻找的答案:Default Proxy issues #28780

If you simply want to use the default system proxy and need to pass default credentials to that proxy (because the proxy is an authenticated proxy) during HTTP requests, then do this:

var handler = new HttpClientHandler();
handler.DefaultProxyCredentials = CredentialCache.DefaultCredentials;
var client = new HttpClient(handler);