2016-04-26 46 views
2

另一个提琴手无法获取它后捕获。无法让提琴手从本地主机不同的端口捕获MVC的HttpClient网络API调用

与此类似SO Post我花了两个小时的时间阅读和尝试不同的解决方案,但没有一个允许我看到我的提琴手web api流量。

作为一个方面说明我的代码工作我只是专注于让小提琴向我展示api调用。

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

我的Web API是一个独立的MVC 6,EF运行在端口63381

http://localhost:63381/

我的ASP.NET MVC 5 Web客户机项目运行在端口7项目: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 & 62 machine.config中。 Restarted visual studio did NOT重新启动机器或任何其他服务。这没有奏效。

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

  3. 更改localhost来MACHINENAME:端口 具体而言,我改变http://localhost:63381/api/MyApihttp://gpgvm-pc:63381/api/MyApi

  4. 改性的Global.asax用:

    ServicePointManager.ServerCertificateValidationCallback =新RemoteCertificateValidationCallback(委托{返回true;});

  5. 提琴手自定义规则

  6. 反向代理

  7. 集小提琴手听不同的端口上。

此时我投降。在我看来#1应该工作捕捉所有的东西,但我显然仍然做错了什么,因为我可以让小提琴手抓住一个或另一个,但不是客户端调用客户端?


更新:

我的机器锁定并重新启动后,我开始看到API调用,所以这个问题是一些与我的机器。很抱歉打扰。

+0

Fiddler中设置了哪些过滤器? – trailmax

+0

不是。对不起,没有提到我在OP检查。 – GPGVM

回答

3

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

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

的文档有有关这个问题,以及:

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

+0

我确实尝试了机器名称......参见OP中的第3点。现在有可能我没有正确地做。我会用我试过的更新OP。 – GPGVM

+0

当我尝试从mvc客户端调用api时,HttpClient给了我无效的主机名。 – GPGVM

+0

尝试更改为您的ip代替。 – MrApnea

1

如果您尝试打在API的具体行动,那么使用该代码的WebAPI配置

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 }); 

     } 

此代码,其中u调用你的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" }); 
      } 
     } 
}