PageSize 和 MaxTop 的区别

问题描述 投票:0回答:3

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

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

在其中任何一个上调用

GET odata/Products?$top=100
都只给我 20 个结果。

c# odata asp.net-web-api-odata odata-v4
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


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,则最终结果是顶部
x


2
投票

MSDN中所述:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.