public IQueryable<Book> GetBooksForSearch
(string profileIds, Sort sort, bool sortAscending)
我找不到有关该控制器如何翻译和过滤结果以及更重要的是如何配置此行为(例如,限制最大结果)的任何文档,有人知道吗?
-- 更新 --
发现MVC Web API可以解决问题。但我们如何配置它呢?
public IQueryable<Book> GetBooksForSearch
(string profileIds, Sort sort, bool sortAscending)
我找不到有关该控制器如何翻译和过滤结果以及更重要的是如何配置此行为(例如,限制最大结果)的任何文档,有人知道吗?
-- 更新 --
发现MVC Web API可以解决问题。但我们如何配置它呢?
看起来 ResultLimitAttribute 已被删除。请参考此提交记录
它已经合并到 [Queryable] 属性的一个功能中,该功能现在是 OData 支持所必需的。请参见此处的讨论
正确的用法现在应该是
[Queryable(ResultLimit = 10)]
[更新]
从RTM开始,Queryable的ResultLimit功能已被删除。另外,[Queryable]已被移动到它自己的预览包中。有关更多信息,请参见此博客文章和此文章以获取新用法的说明。
[更新2 11-16-12] 随着 ASP.Net Fall 2012 Update Preview 的发布,一些更新也做了调整。 [Queryable]属性的 ResultLimit 属性已重新添加到 OData 包中。
请查看本文此处以了解一些变化的情况。
这里是更新后的 Nuget 包。截至本文撰写,它是预览版。
有一个叫做ResultLimitAttribute
的操作过滤属性,您可以在返回IQueryable<T>
或IEnumerable<T>
的任何操作方法上使用它以限制返回的数据量。
[ResultLimit(100)]
public IQueryable<Product> Get() {
// ...
}
有一个关于使用MVC Web API进行分页和查询的短视频,您可以在这里观看。
视频解释了如何通过以下方法之一执行分页:
pageIndex
和pageSize
作为参数,并返回请求的项目数。据我所知,您无法使用第一种方法配置返回的最大项目数,但是可以通过使用第二种方法限制返回的项目数,并仅检查if (pageSize>maxPage) then return maxPage items
。
IQueryable.Take(n).filter()
代替IQueryable.filter().Take(n)
。 - xandyEnableQueryAnnotation
并使用PageSize
参数而不是QueryableAttribute
或ResultLimit
。([Queryable]
仍然有效,但已被标记为过时。)目前,您将使用以下语法:[EnableQuery(PageSize = 20, MaxTop = 20)]
public IQueryable<Product> Get() {
// ...
}
通过使用PageSize
,您可以设置未参数化请求的默认页面大小。如果不包括MaxTop
值,则流氓客户端可能会将顶部设置为非常高的值并绕过页面默认值。使用MaxTop
,如果客户端请求超过API支持的记录数,将抛出异常。