webapiconfig solicitud recurso que ningún encontrado con coincida c# .net asp.net-mvc rest asp.net-mvc-4

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/", };



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 .