/// <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)); }
/// <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); } }