2012-07-13 10 views
56

Ich habe ein WP7-Spiel, das RESTsharp verwendet, um mit meinem RESTful-Server MVC4 zu kommunizieren, aber ich habe oft Probleme, Anforderungen zu machen, die funktionieren, und deshalb möchte ich debuggen, wo es fehlschlägt.Wie debuggen Sie MVC 4 API-Routen am besten?

Dies ist ein Beispiel, wo der Konstruktor auf meinem GameController getroffen wird, aber die Post Methode wird nicht getroffen, und ich verstehe nicht warum.

Client-Code:

public void JoinRandomGame() 
{ 
    client = new RestClient 
    { 
     CookieContainer = new CookieContainer(), 
     BaseUrl = "http://localhost:21688/api/", 
    }; 

    client.Authenticator = GetAuth(); 

    RestRequest request = new RestRequest(Method.POST) 
    { 
     RequestFormat = DataFormat.Json, 
     Resource = "game/" 

    }; 

    client.PostAsync(request, (response, ds) => 
    {}); 
} 

Server Code:

public void Post(int id) 
    { 
     if (ControllerContext.Request.Headers.Authorization == null) 
     { 
      //No auth 
     } 
     if (!loginManager.VerifyLogin(ControllerContext.Request.Headers.Authorization.Parameter)) 
     { 
      //Failed login 
     } 

     string username; 
     string password; 
     LoginManager.DecodeBase64(ControllerContext.Request.Headers.Authorization.Parameter, out username, out password); 
     gameManager.JoinRandomGame(username); 
    } 

Meine Strecken sind wie diese

 routes.MapHttpRoute(
      name: "gameAPI", 
      routeTemplate: "api/game/{gameId}", 
      defaults: new 
      { 
       controller = "game", 
       gameId = RouteParameter.Optional 
      }    
     ); 
+2

http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx –

+0

Ich kann die Debuggerinformationen nicht sehen, wenn ich über einen WP7-Emulator auf meinen RESTful-Service zugreife? – Mech0z

Antwort

30

RouteDebugger für herauszufinden, welche Strecken gut ist, wird/werden nicht getroffen werden.

http://nuget.org/packages/routedebugger

+0

Bereits in den Kommentaren oben vorgeschlagen, aber ich kann nicht sehen, wie das mir sagen sollte, wo es schief geht ? http://www.gratisimage.dk/graphic/images/2012/July/13/C044_50005206.jpg das ist, was ich damit bekomme und loookign bei api/game/{gameId} \t controller = spiel, gameId = das Zeug ich sollte das funktionieren? – Mech0z

+0

Gemäß deinem Screenshot ist gameId nicht optional. Versuchen Sie, gameId mit einzubeziehen, und sehen Sie, ob es Ihre Route erreicht ... –

+0

Beachten Sie auch, dass Ihre Post-Aktion eine optionale gameId nicht akzeptieren kann. Überlegen Sie entweder, ob es obligatorisch wird oder ob der Parameter nullable (int? GameId) oder einen Standardwert festlegen soll (int gameId = 0). –

0

Ist Gamecontroller aus ApiController ableiten? Verwenden Sie WebApi?

Wenn nicht dann denke ich, dass "/ api /" für neue WebApi-Funktion reserviert ist. Versuchen Sie, Ihren Routing- und Controller-Namen in "gameapi" zu ändern

Wenn Sie jedoch WebApi verwenden.

entfernen Dann api von Yor BaseUrl

client = new RestClient 
    { 
     CookieContainer = new CookieContainer(), 
     BaseUrl = "http://localhost:21688/", 
    }; 
+0

Ja Ich habe es funktioniert, aber es ist nur, wenn ich einige habe, die nicht funktionieren Ich kann nicht herausfinden, eine gute Möglichkeit, es zu tun, aber mein Controller ist so http://pastebin.com/qki60LyU – Mech0z

+0

Dann können Sie RouteDebugger von " Flem s "Link, es ist die gleiche Sache von meinem Link :) Führen Sie es einfach auf Ihrer Seite, die von WP7 verwendet wird, tun Sie es im Browser. Sie können auch über die Installation von Elmah denken - http://nuget.org/packages/elmah –

+0

Das gibt mir nur eine XML-Datei (Daher jetzt Informationen von routedebugger) und auch wenn ich es ausführe ich meine Get und nicht meine Post (Which funktioniert gut) – Mech0z

2

Sie können ASP.NET Web API Routen Debugger versuchen. Es ist für Web API geschrieben. https://trocolate.wordpress.com/2013/02/06/introducing-asp-net-web-api-route-debugger/ http://nuget.org/packages/WebApiRouteDebugger/

+0

Dieses Paket ist für C# gedacht Scheint nicht vb.net zu unterstützen –

+6

Versucht das. Hat nicht funktioniert für mein ASP.NET MVC 5 Projekt mit Web-API hinzugefügt am. Dann habe ich mein Projekt komplett durcheinander gebracht, wenn ich es deinstallierte aufgrund seiner vielen Abhängigkeiten.Erachten Sie es nur installieren. – Rap

+1

Es vermasselte sogar meine Web-API-2-Projekt - warum ein Debugging-Tool Razor, Twitter Bootstrap und andere Add-ons zu einem strikten JSON-Webdienst hinzufügen müssen? Phil Haacks Werkzeug ist besser und sehr minimal – Dai

69

Ein andere Möglichkeit ist ein Event-Handler in Global.asax.cs hinzufügen, um die eingehende Anfrage zu holen und dann auf dem Weg Werte in den VS-Debugger suchen. Überschreiben Sie die Init Methode wie folgt:

public override void Init() 
{ 
    base.Init(); 
    this.AcquireRequestState += showRouteValues; 
} 

protected void showRouteValues(object sender, EventArgs e) 
{ 
    var context = HttpContext.Current; 
    if (context == null) 
     return; 
    var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(context)); 
} 

Dann einen Haltepunkt in showRouteValues gesetzt und Blick auf den Inhalt der routeData.

Beachten Sie, dass in einem Web-API-Projekt die Http-Routen in WebApiConfig.cs, nicht RouteConfig.cs sind.

+8

Schnell und schmutzig, genau das, was ich brauchte! –

+0

Dies ist keine Lösung mit Dutzenden/Hunderten von Controllern. –

Verwandte Themen