【问题标题】:Continuation token specified in the request is malformed / Invalid format for continuation token Azure Cosmos DB pagination请求中指定的延续令牌格式错误/延续令牌的格式无效 Azure Cosmos DB 分页
【发布时间】:2021-11-12 03:52:11
【问题描述】:

我在使用延续令牌在 cosmos 数据库中实现分页时遇到问题。我第一次使用 JSON 格式的延续令牌获得第一批结果,但是当我将相同的令牌 JSON 字符串传递回 cosmos DB 以获取下一组结果时,有时它会抛出“请求中指定的延续令牌格式错误”或有时“延续令牌的格式无效”。

这里是代码-

        QueryRequestOptions queryRequestOptions = new QueryRequestOptions
        {
            MaxItemCount = pageSize
        };

        try
        {
            using (FeedIterator<TOutputDocument> resultSetIterator = _cosmosContainer.GetItemQueryIterator<TOutputDocument>(queryDefinition, continuationToken, queryRequestOptions))
            {
                if (resultSetIterator.HasMoreResults)
                {
                    FeedResponse<TOutputDocument> response = await resultSetIterator.ReadNextAsync();

                    if (response == null)


                    {
                        throw new NullReferenceException($"Unable to get response from cosmos db against query - {query}, container - {nameof(_cosmosContainer)}");
                    }
                    continuationToken = response.ContinuationToken;
                    documents.AddRange(response);
                }
            }
        }
        catch (CosmosException ex)
        { }

谢谢

【问题讨论】:

  • 你可以在问题中添加continuationToken吗?
  • 2 种可能的情况:您在不同的查询中使用延续令牌,或者您可能在其他地方(可能通过 Web API)发送该延续令牌,当它返回时,它被错误编码.喜欢stackoverflow.com/q/66995110/5641598

标签: azure azure-cosmosdb azure-cosmosdb-sqlapi


【解决方案1】:

如错误所示,继续标记似乎为空或格式无效。

如果令牌为空,

[{\"token\":null,\"range\":{\"min\":\"05C1DFFFFFFFFC\",\"max\":\"FF\"}}]

按照issue 中提到的步骤进行操作。

如果是Invalid token,尝试使用Base64编码如下

string continuationToken = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(cosmosToken));

【讨论】:

  • 在传回 Cosmos db 时必须对令牌进行编码和解码。非常感谢@sajeetharan。
猜你喜欢
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
相关资源
最近更新 更多