6

一直在玩(单页应用程序)BigShelf示例。我发现真正有趣的是 GetBooksForSearch 方法 (/api/BigShelf/GetBooksForSearch),它需要额外$filter的 , $inlinecount, $top,$skip参数用于分页和过滤结果,这些参数在控制器代码中不存在:

public IQueryable<Book> GetBooksForSearch
    (string profileIds, Sort sort, bool sortAscending)

我找不到任何关于控制器如何翻译和过滤结果的文档,更重要的是,如何配置这种行为(例如,限制最大结果),有人知道吗?

- 更新 -

发现 MVC Web API 可以解决问题。但是我们该如何配置呢?

4

4 回答 4

14

似乎 ResultLimitAttribute 已被删除。看到这个提交

它被整合到 [Queryable] 属性的一个功能中,现在 OData 支持需要该功能。请参阅此处的讨论

正确使用现在是

[Queryable(ResultLimit = 10)]

[更新]

从 RTM 开始,Queryable 的 ResultLimit 功能已被删除。此外,[Queryable] 已移至其自己的预览包中。有关更多信息,请参阅博客文章,有关新用法的说明,请参阅此文章。

[更新 2 11-16-12] 随着 ASP.Net 2012 年秋季更新预览的内容再次更新。[Queryable] 属性的 ResultLimit 属性已添加回 OData 包。

请参阅此处的文章了解一些更改。

是更新的 Nuget 包。在撰写本文时,它是一个预览包。

于 2012-08-14T19:41:46.493 回答
11

有一个称为动作过滤器属性ResultLimitAttribute,您可以在任何返回IQueryable<T>甚至IEnumerable<T>限制返回的数据量的动作方法上使用它。

[ResultLimit(100)]
public IQueryable<Product> Get() {
    // ...
}
于 2012-02-21T17:21:48.093 回答
3

有一个关于使用 MVC Web API 进行分页和查询的简短网络广播,您可以在此处观看

它解释了如何执行分页

  • 使用 OData 查询语法,在这种情况下,Web API 会自动为您解释和检索结果,
  • 或者通过编写自己的方法,将 and 作为参数pageIndexpageSize然后返回请求的项目数。

AFAIK,您无法配置使用第一种方法返回的最大项目数,但您可以限制使用第二种方法返回的项目数,只需检查if (pageSize>maxPage) then return maxPage items.

于 2012-02-21T09:08:11.743 回答
1

正如 Cody Clark 指出的那样,随着时间的推移,这一领域发生了相当多的变化。从 5.2 版本的 WebAPI 开始,您现在使用EnableQueryAnnotationandPageSize参数而不是QueryableAttributeor ResultLimit。([Queryable]仍然有效,但它被标记为过时。)目前您将使用以下语法:

[EnableQuery(PageSize = 20, MaxTop = 20)]
public IQueryable<Product> Get() {
    // ...
}

通过使用PageSize,您可以为未参数化的请求设置默认页面大小。如果您不包含该MaxTop值,流氓客户端可能会将顶部设置为非常高的值并绕过页面默认值。使用MaxTop,如果客户端请求的记录多于您的 API 支持的记录,您将引发异常。

于 2014-09-09T03:27:03.643 回答