solicitud - webapiconfig c#
¿Cómo se depuran las rutas MVC 4 API? (5)
Tengo un juego WP7 que usa RESTsharp para comunicarse con mi servidor MVC4 RESTful, pero a menudo tengo problemas al hacer que las solicitudes funcionen y, por lo tanto, quiero depurar donde falla.
Este es un ejemplo donde se golpea el Constructor en mi GameController
, pero el método Post
no se golpea, y no entiendo por qué.
Codigo del cliente:
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) =>
{});
}
Código del servidor:
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);
}
Mis rutas son así
routes.MapHttpRoute(
name: "gameAPI",
routeTemplate: "api/game/{gameId}",
defaults: new
{
controller = "game",
gameId = RouteParameter.Optional
}
);
¿GameController se deriva de ApiController? ¿Estás usando WebApi?
Si no, entonces creo que el "/ api /" está reservado para la nueva función de WebApi. Intente cambiar su enrutamiento y nombre de controlador a "gameapi"
Sin embargo, si está utilizando WebApi.
A continuación, elimine la API de su BaseUrl
client = new RestClient
{
CookieContainer = new CookieContainer(),
BaseUrl = "http://localhost:21688/",
};
Hay más posibilidades para probar las rutas. Puede probar de forma manual o automatizada como parte de las pruebas unitarias. Prueba manual:
Pruebas automatizadas:
Otra forma es agregar un controlador de eventos en Global.asax.cs
para recoger la solicitud entrante y luego observar los valores de ruta en el depurador VS. Reemplace el método Init
siguiente manera:
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));
}
Luego establezca un punto de interrupción en showRouteValues
y mire los contenidos de routeData
.
Tenga en cuenta que en un proyecto de API web, las rutas Http están en WebApiConfig.cs
, no en RouteConfig.cs
.
Puede probar ASP.NET Web API Route Debugger. Está escrito para Web Api. https://trocolate.wordpress.com/2013/02/06/introducing-asp-net-web-api-route-debugger/ http://nuget.org/packages/WebApiRouteDebugger/
RouteDebugger es bueno para descubrir qué rutas serán / no serán atacadas.