/// <summary> /// Performs an HTTP GET request on an internet resource /// </summary> /// <typeparam name="T"></typeparam> /// <param name="url"></param> /// <param name="queryParams"></param> /// <param name="ct"></param> /// <exception cref="HttpRequestException">If the request is unsuccessful</exception> /// <returns></returns> public async Task <T> GetAsync <T>( string url, IEnumerable <KeyValuePair <string, string> > queryParams, CancellationToken ct) { if (queryParams != null) { string queryString = string.Join("&", queryParams.Select(param => $"{Uri.EscapeDataString(param.Key)}={Uri.EscapeDataString(param.Value)}")); url = _urlRegex.IsMatch(url) ? $"{url}&{queryString}" : $"{url}?{queryString}"; } Uri uri = new Uri(url); HttpResponseMessage response = await Http.GetAsync(uri, ct); if (!response.IsSuccessStatusCode) { response = await RetryMethod.RetryGet(Http, uri, ct); } //if the response is still failed after retrying, throw an exception response.EnsureSuccessStatusCode(); string json = await response.Content.ReadAsStringAsync(); Trace.WriteLine($"HTTP GET '{uri}' returned:\n{json}"); return(JsonConvert.DeserializeObject <T>(json)); }
/// <summary> /// Performs an HTTP POST request on an internet resource /// </summary> /// <typeparam name="T"></typeparam> /// <param name="uri"></param> /// <param name="content"></param> /// <param name="ct"></param> /// <returns></returns> public async Task <HttpResponseMessage> PostAsync( string uri, HttpContent content, CancellationToken ct) { Uri requestAddress = new Uri(BaseAddress, uri); HttpResponseMessage response = await Http.PostAsync(requestAddress, content, ct); if (!response.IsSuccessStatusCode) { response = await RetryMethod.RetryPost(Http, requestAddress, content, ct); } //if the response is still failed after retrying, throw an exception response.EnsureSuccessStatusCode(); return(response); }