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