示例#1
0
        /// <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));
        }
示例#2
0
        /// <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);
        }