无法让Fiddler从使用localhost不同端口

时间:2016-04-26 15:21:05

标签: c# asp.net fiddler

另一个小提琴手无法抓住它。

与此SO Post类似,我现在花了两个小时阅读并尝试不同的解决方案,但没有一个允许我看到我的小提琴网络流量。

作为旁注,我的代码正在运作,我只是专注于让小提琴手向我展示api电话。

我将描述我的设置然后我尝试过。

我的Web API是一个单独的MVC 6,EF 7项目,在端口63381上运行

  

http://localhost:63381/

我的ASP.NET MVC 5 Web客户端项目正在端口上运行:59722

  

http://localhost:59722/

mvc客户端中的典型操作控制器:

//Controller CTOR
public ClientController()
{
  client = new HttpClient();
  client.BaseAddress = new Uri("http://localhost:63381/api/MyApi");
  client.DefaultRequestHeaders.Accept.Clear();
  client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}

//Action within ClientController
public async Task<JsonResult> AddNewSubCategory()
{
   HttpResponseMessage responseMessage = await client.PostAsJsonAsync(url2, content);
   if (responseMessage.IsSuccessStatusCode)
   {
     return Json("[{Update Success}]", JsonRequestBehavior.AllowGet);
   }
     return Json("[{Error Updating}]", JsonRequestBehavior.AllowGet);
   }
}
  1. 将该块添加到32&amp; 62 machine.config。重新启动的visual studio执行 NOT 重启机器或任何其他服务。这不起作用。

  2. 将该块添加到客户端web.config,但这不起作用。

  3. 将localhost更改为machinename:port 具体来说,我将http://localhost:63381/api/MyApi更改为http://gpgvm-pc:63381/api/MyApi

  4. 修改后的Global.asax:

    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate {return true;});

  5. Fiddler自定义规则

  6. 反向代理

  7. 设置fiddler在另一个端口上侦听。

  8. 此时我投降了。在我看来#1应该能够捕获所有内容,但我显然仍然做错了,因为我可以让小提琴手捕获其中一个但不是客户端呼叫客户端???

    更新

    我的机器已锁定,重启后我开始看到api通话,所以这个问题与我的机器有关。很抱歉打扰。

2 个答案:

答案 0 :(得分:3)

问题很可能是您正在使用以特殊方式处理的localhost。

尝试使用机器名称或您的IP(不要使用127.0.0.1)。

文档中也有相关信息:

http://docs.telerik.com/fiddler/Observe-Traffic/Troubleshooting/NoTrafficToLocalhost

答案 1 :(得分:1)

如果您尝试在api中执行特定操作,请在webapi config中使用该代码

public static void Register(HttpConfiguration config)

        {
            //config.Routes.MapHttpRoute(
            //    name: "DefaultApi",
            //    routeTemplate: "api/{controller}/{id}",
            //    defaults: new { id = RouteParameter.Optional });

           config.Routes.MapHttpRoute("API Default", "api/{controller}/{action}/{id}",
           new { id = RouteParameter.Optional });

        }

这段代码,你打电话给你的api。

 public ActionResult ClientController(model content)

        {
            try
            {
                HttpClient client = new HttpClient("http://localhost:63381/");
                client.BaseAddress = new Uri();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                HttpResponseMessage response = client.PostAsJsonAsync("api/MyApi/url2", content).Result;
                if (response.IsSuccessStatusCode)
                {
                    return Json(new { code = 0, message = "Success" });
                }
                else
                {
                    return Json(new { code = -1, message = "Failed" });
                }
            }
            catch (Exception ex)
            {
                int code = -2;
                return Json(new { code = code, message = "Failed" });
            }
        }
}