Azure Cosmos 分页:FeedResponse.ContinuationToken 在下一个请求中不起作用

Azure Cosmos Pagination: FeedResponse.ContinuationToken not working in the next request

下面是我在 Azure Cosmos 中进行分页的代码。在该函数中,我 return FeedResponse 的 ContinuationToken。获取第一页的第一个请求很好,它 return Continuation Token。但是,如果我在下一个请求中使用该令牌,则 API return 错误 500.

我还注意到来自 FeedRespone 的 ContinuationToken return 看起来像这样的 Json 格式。我试图只获取令牌部分,甚至复制整个 json 但没有雪茄

"nextToken": "[{"token":"+RID:~UVURALkfIb4FAAAAAAAAAA==#RT:1#TRC:3#RTD:hCgamV5sp6dv/pVR3z0oBTMxMzIuMTQuNDFVMTY7MjY7NDIvOTk3MzIxMlsA#ISV:2#IEO:65567#QCF:1#FPC:AQEAAAAAAAAACAAAAAAAAAA=","range":{"min":"","max":"FF"}}]"

第一页的响应带有令牌return 输入Return令牌到下一个请求和错误500

函数代码

public virtual async Task<(IEnumerable<TDomain>, string token)> ListAsync(List<ISpecification<TEntity>> specifications, PageOptions pageOptions, CancellationToken cancellationToken)
        {
            var container = await GetContainer(cancellationToken);
            string token = null;
            var result = new List<TDomain>();
            QueryRequestOptions options = new QueryRequestOptions()
            {
                MaxItemCount = pageOptions.MaxResults
            };
            options.MaxItemCount = pageOptions.MaxResults;
            try
            {

                var query = container
                    .GetItemLinqQueryable<TEntity>(false, pageOptions.NextToken, options)
                    .Specify(specifications);

                var iterator = _cosmosLinqQuery.GetFeedIterator(query);

     
                    var response = await iterator.ReadNextAsync(cancellationToken);
                    token = response.ContinuationToken; // return a token
                    foreach (var item in response)
                    {
                        var mapped = _mapper.ToDomain(item);
                        result.Add(mapped);
                    }
      
            }
            catch (Exception ex)
            {
                var exception = new DataAccessException("Unexpected error while listing items", ex);
                exception.Data["ContainerName"] = ContainerName;
                throw exception;
            }

            return (result,token);
        }

您的第二个屏幕截图显示您正在传递以 +RID... 开头的令牌,这不是之前令牌的开头方式(之前的令牌以 [{"token" 开头)。

您能否删除作为令牌一部分的 JSON 包装属性?

第二个调用应该 正好 [{"token":"+RID:~UVURALkfIb4FAAAAAAAAAA==#RT:1#TRC:3#RTD:hCgamV5sp6dv/pVR3z0oBTMxMzIuMTQuNDFVMTY7MjY7NDIvOTk3MzIxMlsA#ISV:2#IEO:65567#QCF:1#FPC:AQEAAAAAAAAACAAAAAAAAAA=","range":{"min":"","max":"FF"}}]。 请记住,您也在 URL 中发送它,因此那里也可能有字符转义。