我正在从 Microsoft.Azure.Documents SDK 迁移到新的 Microsoft.Azure.Cosmos (v3.2.0),但在获取分页查询的继续 token 时遇到问题。在以前的 SDK 中,当您拥有 FeedResponse 对象时,它会返回 HasMoreResults 的 bool 值以及 ContinuationToken,如果用户想要调用下一页(通过 API 端点),我会将其传递给用户。在新的 SDK 中,我尝试在容器上使用 GetItemQueryIterator 方法,我看到的唯一示例是使用 while 循环来获取使用 HasMoreResults 值的所有页面,而我无法提取 ContinuationToken 并只传回第一个一组结果。
这是我的代码到目前为止的样子:
var feedIterator = _documentContext.Container.GetItemQueryIterator<MyDocumentModel>(query, request.ContinuationToken, options);
if (feedIterator.HasMoreResults)
{
listViewModel.HasMoreResults = true;
//listViewModel.ContinuationToken = feedIterator.ContinuationToken; (DOES NOT EXIST!)
}
注释掉的行是我通常希望从中提取 ContinuationToken 的地方,但它不存在。
大多数示例都显示如何使用迭代器,如下所示:
while (feedIterator.HasMoreResults)
{
listViewModel.MyModels.AddRange(_mapper.Map<List<MyModelListViewItem>>(await results.ReadNextAsync()));
}
但我只想返回单页结果,如果我想获取下一页,则传递一个继续 token 。
最佳答案
ContinuationToken 是 ReadNextAsync 响应的一部分:
FeedResponse<MyDocumentModel> response = await feedIterator.ReadNextAsync();
var continuation = response.ContinuationToken;
原因是 ReadNextAsync 是进行服务调用的时刻,代表数据页,并且延续是针对该特定页的。
关于azure - 使用连续 token 的 Microsoft.Azure.Cosmos SDK 分页查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58108291/