6

[EnableQuery(PageSize=20)]和有什么区别[EnableQuery(MaxTop=20)]

据我所知,他们都对结果设置了最大限制。

调用GET odata/Products?$top=100他们中的任何一个都只会给我 20 个结果。

4

3 回答 3

5

区别在于服务器分页驱动模式

OData 提供两种服务器分页模式:客户端驱动服务器驱动

PageSize控制服务器在服务器驱动模式下使用的页面大小。如果调用者提供$top参数,则不使用。

MaxTop控制$top调用者在客户端驱动模式下可以指定的最大值。

客户驱动模式

调用者将提供页面大小参数 ( $top)。服务器将使用$top来进行分页。调用者可以提供$skip参数来获取下一页。

例子:

第一页:http://server/odata/Entity?$top=20

下一页:http://server/odata/Entity?$top=20&$skip=20

服务器驱动模式

调用者不会提供页面大小参数 ( $top)。服务器将使用PageSize参数进行分页。响应在 JSON 结果中包含一个@data.nextLink条目,以供调用者获取下一页数据。

示例PageSize = 20

第一页:http://server/odata/Entity

服务器将返回一个@data.nextLink到下一页:http://server/odata/Entity?$skip=20

于 2018-08-16T14:00:41.600 回答
3

我认为@jvitor83 的答案是有道理的。

MaxTop 仅影响请求 Uri 包含 $top 的场景。如果 $top 值超过 MaxTop 值,您可能会收到以下错误消息:

{
  "error":{
    "code":"","message":"The query specified in the URI is not valid. The limit of '20' for Top query has been exceeded. The value from the incoming request is
'100'."
  }
}

但是,PageSize 会影响最终的查询结果。例如,你设置[EnableQuery(PageSize=20)],表示如果最终结果的数量超过 20 个,你希望服务器返回 20 个结果。

最终查询结果由是否使用$top来决定。如果不设置$top,则最终查询结果为总数据集。并且,如果$top=x设置且x小于或等于 MaxTop,则最终结果为 top x

于 2015-03-30T09:28:47.733 回答
2

MSDN中所述:

MaxTop = 获取或设置客户端可以请求的 $top 的最大值。

PageSize = 获取或设置发送回客户端的最大查询结果数。

于 2015-03-23T08:35:16.110 回答