2016-04-26 17 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" }); 
      } 
     } 
} 
相關問題