下面是我在 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
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(使用前将#替换为@)