使用.NET 4.5 HttpClient的代理

我正在通过.NET的HttpClient调用服务来解决一个错误,尝试通过本地代理(Fiddler)路由请求,但是我的代理设置似乎没有生效。

以下是我如何创build客户端:

private HttpClient CreateHttpClient(CommandContext ctx, string sid) { var cookies = new CookieContainer(); var handler = new HttpClientHandler { CookieContainer = cookies, UseCookies = true, UseDefaultCredentials = false, Proxy = new WebProxy("http://localhost:8888", false, new string[]{}), UseProxy = true, }; // snip out some irrelevant setting of authentication cookies var client = new HttpClient(handler) { BaseAddress = _prefServerBaseUrl, }; client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); return client; } 

然后我通过以下方式发送请求:

 var response = CreateHttpClient(ctx, sid).PostAsJsonAsync("api/prefs/", smp).Result; 

请求直接进入服务器而不尝试访问代理。 我错过了什么?

这段代码适用于我:

 var httpClientHandler = new HttpClientHandler { Proxy = new WebProxy("http://localhost:8888", false), UseProxy = true } 

请注意,我没有提供一个空的数组到我的WebProxy构造函数。 也许这是问题?

啊,我指的是BaseAddress是http://localhost:8081 。 事实certificate,尽pipe将BypassOnLocal设置为false,显然localhost仍然是非常特殊的,它绕过代理。

我在IIS中添加了域绑定,主机文件条目将该域指向127.0.0.1,使用新创build的域,现在它工作。

Fiddler是否configuration为捕获所有进程的stream量? 看看你看到“捕捉”的状态栏。 它应该在旁边显示“所有进程”。 如果显示“Web浏览器”,请单击它并将其更改为所有进程。 这可能是不同的,取决于你使用的提琴手的版本。