Exemplo n.º 1
0
        /// <summary>
        /// Appends query parameters for the supplied list options object to the supplied URI.
        /// </summary>
        /// <param name="uri">
        /// The URI to append the filter parameters to.
        /// </param>
        /// <param name="filterableRequest">
        /// The filtering options.
        /// </param>
        /// <returns>
        /// The URI with the filter parameters.
        /// </returns>
        public static Uri AppendToUri(this IFilterableRequest filterableRequest, Uri uri)
        {
            if (uri == null)
            {
                throw new ArgumentNullException("uri");
            }

            if (filterableRequest == null || filterableRequest.Filters == null)
            {
                return(uri);
            }

            var parameters = filterableRequest.Filters
                             .Select(filter => filter.ToString())
                             .Where(filter => !string.IsNullOrEmpty(filter))
                             .ToArray();

            if (parameters.Length == 0)
            {
                return(uri);
            }

            var queryString = string.Join("&", parameters);

            return(uri.ToString().Contains("?")
                ? new Uri(uri + "&" + queryString, UriKind.Relative)
                : new Uri(uri + "?" + queryString, UriKind.Relative));
        }
Exemplo n.º 2
0
        /// <summary>
        /// The get async.
        /// </summary>
        /// <param name="relativeOperationUri">
        /// The relative operation uri.
        /// </param>
        /// <param name="pagingOptions">
        /// The paging options.
        /// </param>
        /// <param name="filteringOptions">
        /// The filtering options.
        /// </param>
        /// <typeparam name="TResult">
        /// Result from the Get call
        /// </typeparam>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        /// </exception>
        /// <exception cref="ArgumentException">
        /// </exception>
        /// <exception cref="ComputeApiException">
        /// </exception>
        /// <exception cref="HttpRequestException">
        /// </exception>
        public async Task <TResult> GetAsync <TResult>(Uri relativeOperationUri, IPageableRequest pagingOptions = null, IFilterableRequest filteringOptions = null)
        {
            if (relativeOperationUri == null)
            {
                throw new ArgumentNullException("relativeOperationUri");
            }

            if (relativeOperationUri.IsAbsoluteUri)
            {
                throw new ArgumentException("The supplied URI is not a relative URI.", "relativeOperationUri");
            }

            if (filteringOptions != null)
            {
                relativeOperationUri = filteringOptions.AppendToUri(relativeOperationUri);
            }

            if (pagingOptions != null)
            {
                relativeOperationUri = pagingOptions.AppendToUri(relativeOperationUri);
            }

            try
            {
                using (HttpResponseMessage response = await _httpClient.GetAsync(relativeOperationUri))
                {
                    if (!response.IsSuccessStatusCode)
                    {
                        await HandleApiRequestErrors(response);
                    }

                    if (typeof(TResult) == typeof(string))
                    {
                        return((TResult)(object)(await response.Content.ReadAsStringAsync()));
                    }
                    else
                    {
                        return(await ReadResponseAsync <TResult>(response.Content));
                    }
                }
            }
            catch (HttpRequestException ex)
            {
                throw new ComputeApiHttpException(new Uri(_httpClient.BaseAddress, relativeOperationUri), HttpMethod.Get,
                                                  ex);
            }
        }