我正在从Microsoft.Azure.Documents SDK迁移到新的Microsoft.Azure.Cosmos(v3.2.0),并且在获取分页查询的续用令牌时遇到了问题。在先前的SDK中,当您具有FeedResponse对象时,它为HasMoreResults和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()));
}
但是我只想返回一页结果,如果要获得下一页,则传递一个延续标记。
答案 0 :(得分:1)
我还没有尝试过代码,但是仔细阅读了文档,FeedIterator
上的ReadNextAsync()
方法返回了类型为FeedResponse
的对象,该对象具有ContinuationToken
属性。 / p>
答案 1 :(得分:1)
ContinuationToken是ReadNextAsync响应的一部分:
FeedResponse<MyDocumentModel> response = await feedIterator.ReadNextAsync();
var continuation = response.ContinuationToken;
原因是ReadNextAsync是进行服务调用的时刻,表示数据的页面,而该继续是针对该特定页面的。