.net core 2.2 httpclient Factory не предоставляет полные данные в ответ - PullRequest
0 голосов
/ 09 ноября 2019

Я использую .net core 2.2 для своего приложения для списков рейсов и использую для этого wego api. но пока я использую приведенный ниже код для получения полетов из wego api, я не получаю полный ответ, но в почтальоне я получаю полный набор результатов за один запрос.

public async Task<SearchResultMv> GetFlights(FlightParam flightParam, AuthResult auth)
{
    var request = new HttpRequestMessage(HttpMethod.Get, "https://srv.wego.com/metasearch/flights/searches/" + flightParam.SearchId + "/results?offset=0&locale=" + flightParam.locale + "&currencyCode=" + flightParam.currencyCode);
    request.Headers.Add("Bearer", auth.access_token);
    request.Headers.Add("Accept", "application/json");

    var client = _httpClient.CreateClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", auth.access_token);

    var response = await client.SendAsync(request).ConfigureAwait(false);

    SearchResultMv json = new SearchResultMv();

    response.EnsureSuccessStatusCode();

    if (response.IsSuccessStatusCode)
    {
        json = await response.Content.ReadAsAsync<SearchResultMv>().ConfigureAwait(false);
        return json;
    }
}

Некоторое время я не получаюлюбой результат, установленный вышеуказанным кодом. Wego API не обеспечивает нумерацию страниц или фильтрацию этого API. Пожалуйста, помогите мне достичь этого. Спасибо за продвижение.

1 Ответ

0 голосов
/ 09 ноября 2019

Согласно их документации, вам нужно опросить их API, чтобы получить результаты постепенно. Вам также необходимо увеличить смещение по мере возврата результатов.

Например, если первый набор результатов дает 100 результатов, в следующем запросе значение смещения должно быть установлено равным 100. offset=100.

Документация: https://developers.wego.com/affiliates/guides/flights

Редактировать - Добавлен пример решения

Пример кода, который опрашивает API каждую секунду до достижения желаемого количества результатов. Этот код не был протестирован, поэтому вам необходимо настроить его в соответствии со своими потребностями.

const int numberOfResultsToGet = 100;
var results = new List<SearchResultMv>();

while (results.Count < numberOfResultsToGet)
{
    var response = await GetFlights(flightParam, auth);
    results.AddRange(response.Results);

    // update offset
    flightParam.Offset += response.Results.Count;

    // sleep for 1 second before sending another request
    Thread.Sleep(TimeSpan.FromSeconds(1));
}

Измените свой запрос на использование динамического значения Offset. Вы можете добавить свойство Offset в класс FlightParam.

var request = new HttpRequestMessage(
    HttpMethod.Get, 
    $"https://srv.wego.com/metasearch/flights/searches/{flightParam.SearchId}/results?" +
    $"offset={flightParam.Offset}" +
    $"&locale={flightParam.locale}" +
    $"&currencyCode={flightParam.currencyCode}");
...