【问题标题】:Default proxy in .net core 2.0.net core 2.0 中的默认代理
【发布时间】: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


    【解决方案1】:

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

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

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

    【讨论】:

    • 这在 .NET Core 3.0 中也适用于我,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    相关资源
    最近更新 更多