.net core 2.2 httpclient Factory 没有给出完整数据作为响应
.net core 2.2 httpclient Factory not giving Full data as response
我正在为我的航班列表应用程序使用 .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 + "¤cyCode=" + 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 提供任何分页或过滤。所以请帮助我实现这一目标。感谢您的提前。
根据他们的文档,您需要轮询他们的 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
class。
var request = new HttpRequestMessage(
HttpMethod.Get,
$"https://srv.wego.com/metasearch/flights/searches/{flightParam.SearchId}/results?" +
$"offset={flightParam.Offset}" +
$"&locale={flightParam.locale}" +
$"¤cyCode={flightParam.currencyCode}");
我正在为我的航班列表应用程序使用 .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 + "¤cyCode=" + 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 提供任何分页或过滤。所以请帮助我实现这一目标。感谢您的提前。
根据他们的文档,您需要轮询他们的 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
class。
var request = new HttpRequestMessage(
HttpMethod.Get,
$"https://srv.wego.com/metasearch/flights/searches/{flightParam.SearchId}/results?" +
$"offset={flightParam.Offset}" +
$"&locale={flightParam.locale}" +
$"¤cyCode={flightParam.currencyCode}");