场景如下: 当前的MVC5项目提供了几个视图,通过各种API调用来获取这些视图的数据。这些调用仅使用https://[some_url]
字符串执行,如果需要替换变量。
所有调用都返回 JSON 字符串,这些字符串根据 MVC 模型转换为对象。我还想指出,该应用程序本身不具有任何数据库,因为它作为一系列流程中的一个步骤,将创建的对象传递给下一个应用程序。
一个电话针对的是Azure 表存储。这个特殊的表包含几千个条目并且正在稳步增长。使用“普通”API 调用,例如https://api123.sample.net/application/[...]/
仅返回前 1,000 个条目。
这个SO post是我的出发点,建议通过添加查询参数来修改 URLNextParitionKey
和NextRowKey
. 上述 SO 帖子中的一条评论也指向这个Microsoft Doc,建议使用相同的方法向查询中添加参数。
由于我一直在使用的调用返回x-ms-continuation-NextPartitionKey
并x-ms-continuation-NextRowKey
在标题中,我想我应该使用这些来修改我的查询 URL。在 Postman 中输入参数化查询后,我能够修改 URL 并获得 JSON 结果。
但是,这是实际的问题,尽管使用了查询参数,但 API 调用的结果仅返回 1,000。比较参数化 URL 调用和之前使用的标准调用的结果,发现 JSON 文件确实不同。
我认为无法更改每次调用 1,000 个条目的限制,但是如果可能的话,我将如何使用基于 URL 的 API 调用从该特定数据库中检索所有条目(参见下面的方法)?我的意思是,如果使用参数每次调用也只返回 1,000 个条目,那么如何“链接”调用并找出最后一个数据库条目来终止整个过程。
我假设在这种情况下我不能使用基于 URL 的方法。是否需要将实际的 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);
}