I have a WP7 game that uses RESTsharp to communicate with my MVC4 RESTful server, but I often have issues making requests that work and therefore I want to debug where it fails.
This is an example where the Constructor on my GameController
is hit, but the Post
method is not hit, and I don't understand why.
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); }
My routes are like this
routes.MapHttpRoute( name: "gameAPI", routeTemplate: "api/game/{gameId}", defaults: new { controller = "game", gameId = RouteParameter.Optional } );
If you are familiar with ASP.NET MVC, Web API routing is very similar to MVC routing. The main difference is that Web API uses the HTTP verb, not the URI path, to select the action. You can also use MVC-style routing in Web API.
Another way is to add an event handler in Global.asax.cs
to pick up the incoming request and then look at the route values in the VS debugger. Override the Init
method as follows:
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)); }
Then set a breakpoint in showRouteValues
and look at the contents of routeData
.
Keep in mind that in a Web API project, the Http routes are in WebApiConfig.cs
, not RouteConfig.cs
.
RouteDebugger is good for figuring out which routes will/will not be hit.
http://nuget.org/packages/routedebugger
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With