.net core 2.0中的默认代理

coo*_*ake 14 asp.net-core-2.0

我看到了几个关于如何使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)

谢谢

Vla*_*yev 6

我希望这是您正在寻找的答案:默认代理问题 #28780

如果您只想使用默认系统代理并需要在 HTTP 请求期间将默认凭据传递给该代理(因为该代理是经过身份验证的代理),请执行以下操作:

var handler = new HttpClientHandler();
handler.DefaultProxyCredentials = CredentialCache.DefaultCredentials;
var client = new HttpClient(handler);
Run Code Online (Sandbox Code Playgroud)