public async Task <IEnumerable <T> > MakePagedRequest <T>(HttpRequestMessage requestMessage, bool getAllPages) { List <T> results = new List <T>(); string content = await MakeRequest(requestMessage); DuoResponse <T> response = JsonConvert.DeserializeObject <DuoResponse <T> >(content); results.Add(response.Content); if (requestMessage.Method == HttpMethod.Get && getAllPages && response.Metadata?.NextOffset > 0) { string parameters = requestMessage.RequestUri.Query .Replace("?", string.Empty) .Split('&') .Where(x => !x.StartsWith("offset=", StringComparison.OrdinalIgnoreCase)) .Prepend($"offset={response.Metadata.NextOffset}") .Aggregate((a, b) => $"{a}&{b}"); string url = $"{requestMessage.RequestUri.Scheme}://{requestMessage.RequestUri.Host}{requestMessage.RequestUri.AbsolutePath}?{parameters}"; using (requestMessage = new HttpRequestMessage(requestMessage.Method, url)) { requestMessage.Content = requestMessage.Content; results.AddRange(await MakePagedRequest <T>(requestMessage, getAllPages)); } } return(results); }
public async Task <T> MakeRequest <T>(HttpRequestMessage requestMessage) { string content = await MakeRequest(requestMessage); DuoResponse <T> response = JsonConvert.DeserializeObject <DuoResponse <T> >(content); return(response.Content); }