我正在通过.NET的HttpClient调用我的服务错误,尝试通过本地代理(Fiddler)路由请求,但我的代理设置似乎没有生效。
以下是我创建客户端的方法:
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;
请求直接进入服务器而不尝试命中代理。我错过了什么?
答案 0 :(得分:48)
此代码对我有用:
var httpClientHandler = new HttpClientHandler
{
Proxy = new WebProxy("http://localhost:8888", false),
UseProxy = true
}
请注意,我没有向WebProxy
构造函数提供空数组。也许这就是问题所在?
答案 1 :(得分:7)
啊,我指向的BaseAddress是http://localhost:8081
。事实证明,尽管将BypassOnLocal设置为false,显然localhost仍然很特别,它绕过了代理。
我在IIS中添加了域绑定,主机文件条目将该域指向127.0.0.1,使用了新创建的域,现在它可以正常工作。
答案 2 :(得分:2)
Fiddler是否配置为捕获来自所有进程的流量?查看状态栏,其中显示“捕获”。它应该在它旁边显示“所有进程”。如果显示“Web浏览器”,请单击它并将其更改为所有进程。根据您使用的Fiddler版本,这可能会有所不同。