2012-09-01 84 views
11

這是一個真正的頭部劃痕。我創建了我使用的JSON web服務2個ApiControllers: -WebApi控制器沒有發現控制器的動作

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

和: -

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

有了這個路由: -

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

而且當您瀏覽/api/airline/get/ba/api/airline/get/完美的作品,訪問評論沒有任何變化。任何人都可以看到我在這裏錯過的任何明顯的東西嗎

幫助表示讚賞。

+2

你可以發佈你正在使用的確切的URL以及錯誤消息和堆棧跟蹤嗎?猜測:你不是在航空公司或評論中發送信息,而「int」是值類型,它必須有一個值。將它們改爲'int?' – nemesv

+0

我嘗試了以下URI:'/ api/reviews/get/ba','/ api/reviews/get /','/ api/reviews/get/1' ... I總是得到相同的輸出: - '{$ ID: 「1」, 消息:「沒有HTTP資源發現,請求URI的「http匹配://本地主機:88/ControlTower/API /評論/得/ 1'。「, MessageDetail:」在控制器上找不到與請求匹配的操作'評論'。「 }' – dooburt

回答

18

您的默認路由需要一個名爲「code」的參數。您需要添加一個路由來接受名爲airline和/或review的參數,或者明確告訴控制器參數的名稱。

前。/api/reviews/get?airline = 1

+0

非常感謝傑森;) – dooburt