2012-09-01 8 views
11

Un vero capolavoro questo. Ho creato due ApiControllers che sto usando come un webservice JSON: -WebApi Controller per il controller non è stata trovata alcuna azione

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); 
     } 
    } 
} 

e: -

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 questo percorso: -

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

E durante la visita /api/airline/get/ba o /api/airline/get/ funziona perfettamente, visitando qualsiasi variazione di non riesci a leggere. Qualcuno può vedere qualcosa di veramente ovvio mi manca qui?

L'aiuto è apprezzato.

+2

Puoi pubblicare gli URL esatti di quello che stai utilizzando e anche il messaggio di errore e lo stacktrace se ce n'è? Indovina: non stai inviando una compagnia aerea o una recensione e "int" è di tipo value deve avere un valore. Cambiarli in 'int?' – nemesv

+0

Ho provato i seguenti URI: '/ api/reviews/get/ba','/api/reviews/get/','/api/reviews/get/1' ... I ottenere sempre la stessa uscita: - '{ $ id:" 1 ", Messaggio:" Nessuna risorsa HTTP trovata che corrisponde all'URI della richiesta 'http: // localhost: 88/ControlTower/api/reviews/get/1 '. ", MessageDetail:" Nessuna azione è stata trovata sul controller' Recensioni 'che corrisponde alla richiesta. " } ' – dooburt

risposta

18

Il percorso predefinito prevede un parametro denominato "codice". È necessario aggiungere un percorso per accettare un parametro denominato compagnia aerea e/o revisione oppure indicare esplicitamente al controllore il nome del parametro.

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

+0

Molte grazie Jason;) – dooburt

Problemi correlati