J'ai un jeu WP7 qui utilise RESTsharp pour communiquer avec mon serveur MVC4 RESTful, mais j'ai souvent des problèmes pour faire des demandes qui fonctionnent et je veux donc déboguer là où il échoue.
C'est un exemple où le constructeur sur mon GameController
est frappé, mais la méthode Post
n'est pas frappée, et je ne comprends pas pourquoi.
Code client:
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) =>
{});
}
Code serveur:
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);
}
Mes itinéraires sont comme ça
routes.MapHttpRoute(
name: "gameAPI",
routeTemplate: "api/game/{gameId}",
defaults: new
{
controller = "game",
gameId = RouteParameter.Optional
}
);
RouteDebugger est bon pour déterminer quelles routes seront/ne seront pas atteintes.
Une autre façon consiste à ajouter un gestionnaire d'événements dans Global.asax.cs
pour récupérer la demande entrante, puis consulter les valeurs de route dans le débogueur VS. Remplacez la méthode Init
comme suit:
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));
}
Définissez ensuite un point d'arrêt dans showRouteValues
et examinez le contenu de routeData
.
Gardez à l'esprit que dans un projet d'API Web, les routes Http sont dans WebApiConfig.cs
, ne pas RouteConfig.cs
.
Vous pouvez essayer le débogueur de route API Web ASP.NET. Il est écrit pour Web Api. https://trocolate.wordpress.com/2013/02/06/introducing-asp-net-web-api-route-debugger/http://nuget.org/packages/WebApiRouteDebugger /
Il existe plus de possibilités pour tester les itinéraires. Vous pouvez essayer des tests manuels ou automatisés dans le cadre de tests unitaires. Test manuel:
Tests automatisés:
GameController dérive-t-il d'ApiController? Utilisez-vous WebApi?
Sinon, je pense que le "/ api /" est réservé à la nouvelle fonctionnalité WebApi. Essayez de changer votre nom de routage et de contrôleur en "gameapi"
Si toutefois vous utilisez WebApi.
Ensuite, supprimez l'api de yor BaseUrl
client = new RestClient
{
CookieContainer = new CookieContainer(),
BaseUrl = "http://localhost:21688/",
};