在HttpClient上设置代理时出现问题

时间:2019-06-11 23:29:52

标签: .net http proxy dotnet-httpclient webproxy

在我的C#应用​​程序中,我试图将HTTP请求发送到防火墙之外的外部公司。当我使用下面的代码时,我得到一个错误,指出远程站点已强制关闭连接。我以为我在代理设置上做错了什么,但是我不确定。我们的代理不需要身份验证。

var content = new StringContent(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json");

using (var handler = new HttpClientHandler()) {
    handler.Proxy = new WebProxy("http://proxy.my.domain.com:911");

    using (var client = new HttpClient(handler: handler, disposeHandler: false)) {
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "...");

        var response = await client.PostAsync($"https://...", content);

我已经打印出要发送的已编码JSON,但是如果我只是通过curl手动处理请求,那么请求将正确进行,因此,我可以确定我的URL,承载令牌和JSON都是正确的。

1 个答案:

答案 0 :(得分:1)

正如注释中提到的,必须将proxy变量设置为 true 。我想向其他有相同问题的用户强调这一点。

docs中已提及。

我举了一个小例子,说明如何在类似factory的类中使用它:

private HttpClient ClientFactoryV02()
{
    var clientHandler = new HttpClientHandler(){ UseProxy = true};
    clientHandler.Proxy = new WebProxy("address-of-proxy");

    var client = new HttpClient(clientHandler)
    {
        BaseAddress = new Uri("uri");
    }
}
_createHttpClient = () => ClientFactoryV02();

致谢:Ben。ZagNut。