2012-09-01 18 views
11

Este es un verdadero problema. He creado dos ApiControllers que estoy usando como un servicio web JSON: -Controlador WebApi no se encontraron acciones para el controlador

namespace ControlTower.Controllers 
{ 
    public class AirlinesController : ApiController 
    { 
     private static IEnumerable<Airline> MapAirlines() 
     { 
      return (Jetstream.AirlineObject.GetAirlines()).Select(x => x); 
     } 

     [HttpGet] 
     public IEnumerable<Airline> GetAirlines() 
     { 
      return MapAirlines().AsEnumerable(); 
     } 

     [HttpGet] 
     public Airline GetAirlineByCode(string code) 
     { 
      return Jetstream.AirlineObject.GetAirline(code); 
     } 
    } 
} 

y: -

namespace ControlTower.Controllers 
{ 
    public class ReviewsController : ApiController 
    { 
     private static IEnumerable<Review> MapReviews(int airline) 
     { 
      return (Jetstream.ReviewObject.GetReviews(airline)).Select(x => x); 
     } 

     [HttpGet] 
     public IEnumerable<Review> GetReviews(int airline) 
     { 
      return MapReviews(airline).AsEnumerable(); 
     } 

     [HttpGet] 
     public Review GetReviewById(int review) 
     { 
      return Jetstream.ReviewObject.GetReview(review); 
     } 
    } 
} 

Con esta ruta: -

config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/get/{code}", 
       defaults: new { code = RouteParameter.Optional } 
      ); 

Y mientras visita /api/airline/get/ba o /api/airline/get/ funciona perfectamente, visitando cualquier variación de La revisión no lo hace. ¿Alguien puede ver algo realmente obvio que me falta aquí?

Se agradece la ayuda.

+2

¿Puedes publicar las URL exactas de lo que estás utilizando y también el mensaje de error y stacktrace si hay alguna? Adivina: no estás enviando una aerolínea o una revisión y 'int' es un tipo de valor que debe tener un valor. Cambiarlos a 'int?' – nemesv

+0

He intentado los siguientes URI: '/ api/reviews/get/ba','/api/reviews/get/','/api/reviews/get/1' ... I obtener siempre el mismo resultado: - '{ $ id:" 1 ", Mensaje:" No se encontró ningún recurso HTTP que coincida con el URI de solicitud 'http: // localhost: 88/ControlTower/api/reviews/get/1 '. ", MessageDetail:" No se encontraron acciones en el controlador' Revisiones 'que coinciden con la solicitud. " } ' – dooburt

Respuesta

18

Su ruta predeterminada espera un parámetro llamado "código". Debe agregar una ruta para aceptar un parámetro llamado airline y/o revisar, o explícitamente decirle al controlador el nombre del parámetro.

ex./api/reviews/get? airline = 1

+0

Muchas gracias Jason;) – dooburt

Cuestiones relacionadas