Azure 存储服务 Api 调用:如何使用 NextPartitionKey 和 NextRowKey?

Azure Storage Services Api Call: How to use NextPartitionKey and NextRowKey?

场景如下: 当前的 MVC5 项目提供了多个视图,其数据是通过使用各种 API 调用来检索的。这些调用仅使用 https://[some_url] 个字符串执行,如果需要则替换变量。

所有调用returnJSON字符串,根据MVC模型转换为objects。我还想指出,这样的应用程序不具有任何数据库,因为它作为流程链中的一个步骤,将创建的 objects 传递给下一个应用程序。

一个调用针对 Azure Table 存储。这个特定的 table 包含几千个条目并且正在稳步增长。使用 "ordinary" API 调用,例如 https://api123.sample.net/application/[...]/ return 仅前 1,000 个条目。

这个SO post, was my starting point, suggesting to modify the URL by adding the query parameters NextParitionKey and NextRowKey. A comment in the aforementioned SO post also pointed towards this Microsoft Doc,建议使用相同的方法向查询添加参数。

自从我在 header 中使用 returned x-ms-continuation-NextPartitionKeyx-ms-continuation-NextRowKey 以来,我想我应该使用它们来修改我的查询 URL。在 Postman 中输入参数化查询后,我能够修改 URL 并得到 JSON 结果。

然而,这是实际问题,尽管使用了查询参数,API 调用的结果 returned 只有 1,000。比较参数化 URL 调用和之前使用的标准调用的结果,发现 JSON 文件确实不同。

我认为不能更改每次调用 1,000 个条目的限制,但如果可能的话,我将如何使用 URL-based API 调用从该特定数据库中检索所有条目(cf . 下面的方法)?我的意思是,如果使用参数也 returns 每次调用只有 1,000 个条目,怎么可能 "chain" 调用并找出最后一个数据库条目以终止整个过程。

我假设我不能在这种情况下使用 URL-based 方法。是否需要将实际的 API 调用提取到适当的方法中(链接将不胜感激)?

作为附加信息,请考虑以下方法(注意:略有修改):

public static string GetJsonDataFromApi()
        {
            var jsonData = "";
            var apiKey = System.Configuration.ConfigurationManager.AppSettings["ApiKey"];
            var url = BuildWebApiUrl();

            if (IsNullOrWhiteSpace(url) && IsNullOrEmpty(url))
                return jsonData;

            var webClient = new WebClient
            {
                Encoding = Encoding.UTF8,
            };

            using (webClient)
            {
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                webClient.Headers.Add("subscription-key", apiKey);
                try
                {
                    jsonData = webClient.DownloadString(url);
                }
                catch (WebException e)
                {

                }
                return !IsNullOrEmpty(jsonData) ? jsonData : "";
            }
        }

private static string BuildWebApiUrl()
        {
            var tableName = System.Configuration.ConfigurationManager.AppSettings["Table"];
            [some more System.ConfigurationVariables]

            return string.Format(urlTemplate, tableName, nextPartitionKey, nextRowKey);
        }

关于这个问题,我认为我们编写代码来查询 Azure 中的所有实体是更好的方法 table。
如果我们想查询Azure中的所有实体table,我们可以使用SDKMicrosoft.Azure.Cosmos.Table来实现。

var acc = new Microsoft.Azure.Cosmos.Table.CloudStorageAccount(
                         new StorageCredentials("account name", "account key"), true);
            var tableClient = acc.CreateCloudTableClient();
            var table = tableClient.GetTableReference("table name");
            TableContinuationToken token = null;
            var entities = new List<MyEntity>();
            do
            {
                var queryResult = table.ExecuteQuerySegmented(new TableQuery<MyEntity>(), token);
                entities.AddRange(queryResult.Results);
                token = queryResult.ContinuationToken;
            } while (token != null);