2014-09-26 66 views
0

得到解決我的WebAPI進去MoviesController方法Get方法衝突不是的WebAPI

// GET api/movies 
     /// <summary> 
     /// Returns the sorted list of movies 
     /// </summary> 
     /// <returns>Collection of Movies</returns> 
     public IEnumerable<Movie> Get() 
     { 
      return repository.GetMovies().OrderBy(c => c.Title); 
     } 

     /// <summary> 
     /// Returns an individual movie 
     /// </summary> 
     public Movie Get(int movieId) 
     { 
      var movie = repository.GetMovieById(movieId); 
      if (movie == null) 
      { 
       throw new HttpResponseException(HttpStatusCode.NotFound); 
      } 
      return movie; 
     } 

和WebApiConfig.cs是

public static void Register(HttpConfiguration config) 
     { 
      // Web API configuration and services 

      // Web API routes 
      config.MapHttpAttributeRoutes(); 

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

我面臨的是每次獲取(的問題)越來越調用Id方法沒有被調用。我已經嘗試過多種解決方案,但它不適用於我。

+0

你是如何調用方法與ID發佈的樣品網址? – Mairaj 2014-09-26 11:21:15

+0

我得到了答案,方法參數名稱是movieId,在webapiconfig中它唯一的id.i已經改變了id與movieid並更新了routetemplate,就像那個routeTemplate:「api/{controller}/{action}/{movieId}」, – F11 2014-09-26 11:24:03

+0

just比較你的答案和我的答案** routeTemplate ** – 2014-09-26 11:25:25

回答

1

作一次自定義路由如圖所示:

config.Routes.MapHttpRoute(
    name: "MyRoute", 
    routeTemplate: "api/{controller}/{action}/{movieId}", 
    defaults: new { movieId = "0" } //instead of default movieid '0' you can specify as per your requirement. 
    ); 
+0

,然後只有獲取與id被調用。 – F11 2014-09-26 11:21:08

+1

我通常會調用GetW/o參數GetAll,在我看來這實際上是一個更好的名稱,因爲它反映了該方法實際上在做什麼。我個人儘量避免弄亂路線,除非我真的必須這樣做。 – mmeasor 2014-09-26 11:22:14

+0

@ mmeasor ..如果自定義路由是在一個合適的,那麼它不會創建任何問題與默認路由。 – 2014-09-26 11:28:58