2016-04-26 3 views
2

Ein anderer Fiddler kann es nicht bekommen, um Post zu erfassen.Fiddler kann keine HttpClient-Web-Api-Anrufe von MVC mit lokalem Host-Port empfangen

Ähnlich wie SO Post Ich habe zwei Stunden damit verbracht, verschiedene Lösungen zu lesen und auszuprobieren, aber keiner von ihnen erlaubt mir, meinen Fiddler-Web-API-Verkehr zu sehen.

Als eine Randnotiz mein Code funktioniert Ich bin nur darauf konzentriert, Fiddler, um mir die API-Anrufe zu zeigen.

Ich werde dann meine Einrichtung beschreiben, was ich versucht habe.

Mein Web-API ist eine separate MVC 6, EF 7-Projekt läuft auf Port 63381

http://localhost:63381/

Mein ASP.NET MVC 5 Web-Client-Projekt läuft auf Port: 59722

http://localhost:59722/

Ein typischen Regler in dem MVC-Client:

//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. Added des Block 62 bis 32 & machine.config. Neu gestartet Visual Studio tat NICHT Maschine oder einen anderen Dienst neu starten. Das hat nicht funktioniert.

  2. Der Block wurde dem Client web.config hinzugefügt und das hat nicht funktioniert.

  3. Changed localhost Machine: port gezielt verändert I http://localhost:63381/api/MyApi zu http://gpgvm-pc:63381/api/MyApi

  4. Modifizierte Global.asax mit:

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

  5. Fiddler benutzerdefinierte Regeln

  6. Reverse-Proxy-

  7. Set Fiedler auf einem anderen Port zu hören.

An dieser Stelle gebe ich auf. Es scheint mir, # 1 sollte funktionieren, um alles zu erfassen, aber ich mache offensichtlich immer noch etwas falsch, weil ich Fiedler bekommen kann, um den einen oder anderen zu erfassen, aber nicht der Klient, der zum Klienten abruft ???


Update:

Meine Maschine gesperrt und nach einem Neustart begann ich zu sehen, die API-Aufrufe so dass dieses Problem etwas mit meiner Maschine war. Es tut mir leid, mich darum zu kümmern.

+0

Alle Filter in Fiddler eingerichtet? – trailmax

+0

Nein. Sorry hat nicht erwähnt, dass ich in OP eingecheckt habe. – GPGVM

Antwort

3

Das Problem ist höchstwahrscheinlich, dass Sie localhost verwenden, die auf eine spezielle Weise behandelt werden.

Versuchen Sie stattdessen, den Computernamen oder Ihre IP-Adresse zu verwenden (verwenden Sie nicht 127.0.0.1).

Die Dokumentation haben Informationen darüber, wie gut:

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

+0

Ich habe den Namen der Maschine versucht ... siehe Punkt 3 in OP. Jetzt ist es möglich, dass ich es nicht richtig gemacht habe. Ich werde OP mit dem, was ich versucht habe, aktualisieren. – GPGVM

+0

HttpClient gibt mir ungültigen Hostnamen, wenn ich versuche, von mvc Client zu api aufzurufen. – GPGVM

+0

Versuchen Sie stattdessen, Ihre IP-Adresse zu ändern. – MrApnea

1

Wenn Sie versuchen, bestimmte Aktion in api dann diesen Code in 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 }); 

     } 

Dieser Code verwenden zu treffen, wo u nennen deine 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" }); 
      } 
     } 
} 
Verwandte Themen