Exemple #1
0
 /// <summary>
 /// Queries ESI to PUT new data.
 /// </summary>
 /// <typeparam name="T">The type of the response.</typeparam>
 /// <param name="request">The ESI request to make.</param>
 /// <param name="data">The POST data to be included in the request.</param>
 /// <returns>The data from the ESI request.</returns>
 public async Task <EsiResult <T> > QueryEsiPutAsync <T>(EsiRequestHeaders request,
                                                         HttpContent content)
 {
     request.ThrowIfNull(nameof(request));
     content.ThrowIfNull(nameof(content));
     return(await QueryEsiAsync <T>(HttpMethod.Put, request, content).ConfigureAwait(
                false));
 }
Exemple #2
0
        /// <summary>
        /// Queries ESI to send a request.
        /// </summary>
        /// <typeparam name="T">The type of the response.</typeparam>
        /// <param name="method">The HTTP method to use when making the request.</param>
        /// <param name="request">The ESI request to make.</param>
        /// <param name="content">The content to send with the request.</param>
        /// <returns>The data from the ESI request.</returns>
        private async Task <EsiResult <T> > QueryEsiAsync <T>(HttpMethod method,
                                                              EsiRequestHeaders request, HttpContent content = null)
        {
            string url = await request.GetESIUrlAsync(Language).ConfigureAwait(false);

            var message = new HttpRequestMessage(method, url);

            if (content != null)
            {
                // Update content type if requested
                string contentType = request.ContentType.GetAttributeOfType <
                    DescriptionAttribute>()?.Description;
                if (contentType != null && content.Headers != null)
                {
                    content.Headers.ContentType.MediaType = contentType;
                }
                message.Content = content;
            }
            EsiResult <T> esiResult;

            // If previous request expiration is available, add ETag/If-Modified-Since
            request.CacheInfo?.AddRequestHeaders(message.Headers);
            try {
                using (var response = await client.SendAsync(message).ConfigureAwait(false)) {
                    esiResult = await HandleResponseAsync <T>(response);
                }
            } catch (IOException e) {
                // I/O errors become EsiResultStatus.NetworkError
                esiResult = new EsiResult <T>(EsiResultStatus.NetworkError, default(T), e);
            } catch (TimeoutException e) {
                // Time outs become EsiResultStatus.NetworkError
                esiResult = new EsiResult <T>(EsiResultStatus.NetworkError, default(T), e);
            } catch (OperationCanceledException e) {
                // Cancellations become EsiResultStatus.NetworkError
                esiResult = new EsiResult <T>(EsiResultStatus.NetworkError, default(T), e);
            }
            return(esiResult);
        }
Exemple #3
0
 /// <summary>
 /// Queries ESI for GET response data.
 /// </summary>
 /// <typeparam name="T">The type of the response.</typeparam>
 /// <param name="request">The ESI request to make.</param>
 /// <returns>The data from the ESI request.</returns>
 public async Task <EsiResult <T> > QueryEsiGetAsync <T>(EsiRequestHeaders request)
 {
     request.ThrowIfNull(nameof(request));
     return(await QueryEsiAsync <T>(HttpMethod.Get, request).ConfigureAwait(false));
 }