似乎无法获得代理HttpClient的小提琴手

时间:2015-04-23 13:06:38

标签: asp.net-web-api localhost fiddler

我一直有问题让小提琴手拿起自我托管的asp.net web api的流量。我的情况可能有点不同,因为托管web api的同一个应用程序也在使用它(是的,我们有理由这样做:))。我们正在使用HttpClient。以下是我尝试过的事情:

  1. 添加HttpClientHandler并设置代理。
  2. 将以下内容添加到app.config

    <system.net>
    <defaultProxy>
      <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://localhost:8888"/>
    </defaultProxy>
    

  3. 试图从一个单独的.net客户端客户端点击api(认为使用托管它的api的相同进程不允许捕获流量,因为它都是内部进程)。

  4. 现在,如果我在本地打开网络浏览器或邮递员并点击api,那么将正确捕获流量

    以下是客户端代码:

        var handler = new HttpClientHandler();
        handler.UseProxy = true;
        handler.Proxy = new WebProxy("http://127.0.0.1",8888);
    
        var client = new HttpClient(handler) {BaseAddress = new Uri(new Uri("http://localhost:8085"), "api/companies")};
    
        HttpResponseMessage response;
        using (client)
        {
            response = client.GetAsync(client.BaseAddress).Result;
        }
        var result = response.Content.ReadAsAsync<IEnumerable<Company>>().Result;
    

    理想情况下,我希望能够在正在运行的应用程序上打开fiddler并捕获流量(即使在生产中),而无需更改源代码。

1 个答案:

答案 0 :(得分:4)

不幸的是,.NET Framework被硬编码为绕过Localhost地址的代理(请参阅我的功能请求:https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6359204-support-the-loopback-token-in-proxy-bypass-lists

要解决此问题,请将您的请求网址从http://localhost.fiddler:8085更改为synchronized(list) { int objectsN = list.size(); for (int i=0; i < objectsN; i++) { // Do stuff... } } ,Fiddler会接听请求。