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

2024-03-13

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

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

"nextToken": "[{"令牌":"+RID:~UVURALkfIb4FAAAAAAAAAA==#RT:1#TRC:3#RTD:hCgamV5sp6dv/pVR3z0oBTMxMzIuMTQuNDFVMTY7MjY7NDIvOTk3MzIxMlsA#ISV:2#IEO:65567#QCF:1#FPC:AQEAAAAAAAAA啊啊啊啊啊= ","范围":{"最小":"","最大":"FF"}}]"

Response from the First Page with Token return Response from the  First Page with Token return Enter Return Token to next request and error 500 Enter Return Token to next request and error 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 包装属性?

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure Cosmos 分页:FeedResponse.ContinuationToken 在下一个请求中不起作用 的相关文章

随机推荐