簡體   English   中英

無法讓Fiddler使用本地主機不同的端口捕獲來自MVC的HttpClient Web API調用

[英]Can't get Fiddler to capture HttpClient web api calls from MVC with localhost different port

另一個提琴手無法獲取帖子。

與此SO Post類似,我花了兩個小時閱讀和嘗試不同的解決方案,但沒有一個使我看到我的提琴手Web api流量。

順便說一句,我的代碼正在工作,我只是專注於讓提琴手向我展示api調用。

我將描述我的設置,然后再嘗試。

我的Web API是在端口63381上運行的單獨的MVC 6,EF 7項目

HTTP://本地主機:63381 /

我的ASP.NET MVC 5 Web客戶端項目在以下端口上運行:59722

HTTP://本地主機: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。 重新啟動Visual Studio中沒有重新啟動計算機或任何其他服務。 這沒有用。

  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. 提琴手自定義規則

  6. 反向代理

  7. 設置提琴手在另一個端口上偵聽。

至此我投降了。 在我看來,#1應該可以捕獲所有內容,但是顯然我仍然在做錯什么,因為我可以讓提琴手捕獲一個或另一個,而不是客戶端取消向客戶端的請求???


更新:

我的機器被鎖定,重新啟動后,我開始看到api調用,所以這個問題與我的機器有關。 很抱歉打擾。

問題很可能是您使用以特殊方式處理的本地主機。

嘗試使用計算機名稱或您的IP(不要使用127.0.0.1)。

該文檔也包含有關此信息:

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

如果您嘗試在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 });

        }

您在其中調用您的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" });
            }
        }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM