2016-01-21 49 views
4

在asp.net網站API2,當你在新的控制器創建與實體框架模型異步網頁API控制器,默認情況下,第一種方法是這樣的:爲什麼asp.net Web API上的GET方法返回IQueryable?

public IQueryable<MyModel> GetMyModel() 
{ 
    return db.MyModel; 
} 

此方法輸出的JSON只是所有MyModel條目的數組。同時,所有的其他方法POST,PUT,GET(INT ID)和DELETE被標記爲async並返回Task<IHttpActionResult>。爲什麼不是在同一樣式的第一個GET方法,像這樣:

public async Task<IHttpActionResult> GetMyModel() 
{ 
    return Ok(await db.MyModel.ToArrayAsync()); 
} 

我已經試過這一點,它會產生相同的JSON輸出。

回答

4

由於Web API無論如何都會兌現的結果,從而產生所需的最少代碼。

通過致電ToArrayAsync()你基本上做了不必要的工作,這將在稍後爲你完成。

0

它是IQuerable,因爲API調用者可以通過過濾器,並將添加到您的dBset,所以你會得到過濾數據。 我會舉一個例子。考慮你的MyModal有3個屬性Id,Name,Deleted。如果您的客戶端應用程序需要所有行,只有未刪除的行,那麼您必須爲此創建兩個單獨的操作。但使用IQuerable可以減少它。

  1. 所有行:{主機}/API/MyModal
  2. 非刪除的行:{主機}/API/MyModal $過濾器(刪除EQ假)

,並可以更過濾器如top,skip,lineCount。即使你可以用IQureable做分頁。 Web API將像Async一樣工作,因此需要明確寫入Async。

相關問題