在我的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都是正确的。
答案 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。