Сценарий выглядит следующим образом: Текущий проект MVC5 предоставляет несколько представлений, данные которых извлекаются с использованием различных вызовов API. Эти вызовы выполняются с использованием только строк https://[some_url]
, при необходимости заменяя переменные.
Все вызовы возвращают строки JSON, которые преобразуются в объекты на основе моделей MVC. Я также хотел бы отметить, что приложение как таковое не имеет каких-либо баз данных, поскольку оно служит одним из шагов в цепочке процессов, передавая созданные объекты следующим приложениям.
Один вызов нацелен на Azure Хранение таблицы . Эта конкретная таблица содержит пару тысяч записей и постоянно растет. Использование «обычного» вызова API, такого как https://api123.sample.net/application/[...]/
, возвращает только первые 1000 записей.
Этот SO post был моей отправной точкой, предлагая изменить URL, добавив параметры запроса NextParitionKey
и NextRowKey
. Комментарий в вышеупомянутом сообщении SO также указывал на это Microsoft Do c, предлагая тот же подход добавления параметров в запрос.
Поскольку возвращаемый вызов, который я использовал, x-ms-continuation-NextPartitionKey
и x-ms-continuation-NextRowKey
в заголовке, я решил использовать их для изменения URL моего запроса. Мне удалось изменить URL, а также получить результат JSON при вводе параметризованного запроса в Postman.
Однако, и это актуальный вопрос, несмотря на использование параметров запроса, результат вызова API вернул только 1000. Сравнение результатов параметризованного URL-вызова и стандартного вызова, использованного ранее, показало, что файлы JSON действительно были разными.
Я полагаю, что нельзя изменить это ограничение в 1000 записей на вызов, но как бы я использовать вызов API на основе URL для извлечения всех записей из этой конкретной базы данных, если это вообще возможно (см. методы ниже)? Я имею в виду, что если использование параметров также возвращает только 1000 записей за вызов, как можно «связать» вызовы и выяснить последнюю запись в базе данных, чтобы завершить весь процесс.
Я предполагаю, что не могу использовать Основанный на 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);
}