PageSize和MaxTop之间的区别

时间:2015-03-20 11:27:12

标签: c# odata asp.net-web-api-odata odata-v4

[EnableQuery(PageSize=20)][EnableQuery(MaxTop=20)]之间的区别是什么?

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

在其中任何一个上调用GET odata/Products?$top=100都只能给我20个结果。

3 个答案:

答案 0 :(得分:1)

MSDN中所述:

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

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

答案 1 :(得分:1)

我认为@ 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 set,则最终查询结果是总数据集。并且,如果$top=x设置且x小于或等于MaxTop,则最终结果为顶部x

答案 2 :(得分:1)

区别在于服务器在驱动驱动模式下

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