[EnableQuery(PageSize=20)]
和有什么区别[EnableQuery(MaxTop=20)]
?
据我所知,他们都对结果设置了最大限制。
调用GET odata/Products?$top=100
他们中的任何一个都只会给我 20 个结果。
[EnableQuery(PageSize=20)]
和有什么区别[EnableQuery(MaxTop=20)]
?
据我所知,他们都对结果设置了最大限制。
调用GET odata/Products?$top=100
他们中的任何一个都只会给我 20 个结果。
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
我认为@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
。