-1

我正在为我的航班列表应用程序使用 .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 上提供任何分页或过滤。所以请帮助我实现这一目标。感谢提前。

4

1 回答 1

0

根据他们的文档,您需要轮询他们的 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}");
于 2019-11-09T10:47:14.573 回答