2016-01-21 107 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。

相关问题