0

我目前正在開發Web API,並且正在計算如何在控制器中添加新方法FilmsController它必須執行一個LINQ查詢,然後將相關的JSON返回給用戶。一切似乎都是正確的,但是當我嘗試調用該API時,出現錯誤404。我試圖調用的API是api/NewFilms,這應該是正確的。當向web api控制器添加第二個GET操作方法時發現與請求錯誤相匹配的多個操作

這裏是方法GetNewFilms內部FilmsController

public IQueryable<Film> GetNewFilms() 
    { 
     var query = from f in db.Films 
        orderby f.ReleaseYear descending 
        select f; 

     return query; 

    } 

// GET: api/Films 
    public IQueryable<Film> GetFilms() 
    { 
     return db.Films; 
    } 
+0

在ASP多種Get方法[網絡API路由可能重複的IEnumerable .NET MVC 4](http://stackoverflow.com/questions/12775590/web-api-routing-for-multiple-get-methods-in-asp-net-mvc-4) –

回答

1

在默認路由配置,網絡API控制器允許僅具有一個GET動作(不帶任何參數)。如果你有一個以上的GET操作,你會得到一個500錯誤與消息像

多行爲被發現。如果你需要有一個以上的GET動作匹配要求

,你可以爲使用屬性路由的人明確定義路由模式。

public class FilmsController : ApiController 
{ 
    [Route("api/Films/NewFilms")] 
    public IEnumerable<string> GetNewFilms() 
    { 
     return new List<string> { "New Film 1","New Film 1"}; 
    } 

    // GET: api/Films 
    public IEnumerable<string> GetFilms() 
    { 
     return new List<string> { "Film 1","Film 2"}; 
    } 
    public string GetFilm(int id) 
    { 
     return "A single film"; 
    } 
} 

此外,你可以考慮改變你的返回類型從IQueryable到您的DTO(而不是由你的ORM創建的實體類)

+1

它的工作原理,非常感謝你。 – Gab

相關問題