public async Task <TResult> ApiGetAsync <TResult>(Uri relativeOperationUri) { if (relativeOperationUri == null) { throw new ArgumentNullException("relativeOperationUri"); } if (relativeOperationUri.IsAbsoluteUri) { throw new ArgumentException("The supplied URI is not a relative URI.", "relativeOperationUri"); } using (var response = await _httpClient.GetAsync(relativeOperationUri)) { if (response.IsSuccessStatusCode) { return(await response.Content.ReadAsAsync <TResult>(_mediaTypeFormatters)); } switch (response.StatusCode) { case HttpStatusCode.Unauthorized: { throw ComputeApiException.InvalidCredentials( ((NetworkCredential)_clientMessageHandler.Credentials).UserName); } case HttpStatusCode.BadRequest: { // Handle specific CaaS Status response when getting a bad request var status = response.Content.ReadAsAsync <Status>(_mediaTypeFormatters).Result; throw ComputeApiException.InvalidRequest(status.operation, status.resultDetail); } default: { throw new HttpRequestException( String.Format( "CaaS API returned HTTP status code {0} ({1}) when performing HTTP GET on '{2}'.", (int)response.StatusCode, response.StatusCode, response.RequestMessage.RequestUri)); } } } }
/// <summary> /// Invoke a CaaS API operation using a HTTP POST request. /// </summary> /// <typeparam name="TObject">The XML-Serialisable data contract type that the request will be sent.</typeparam> /// <typeparam name="TResult">The XML-serialisable data contract type into which the response will be deserialised.</typeparam> /// <param name="relativeOperationUri">The operation URI (relative to the CaaS API's base URI).</param> /// <param name="content">The content that will be deserialised and passed in the body of the POST request.</param> /// <returns>The operation result.</returns> public async Task <TResult> ApiPostAsync <TObject, TResult>(Uri relativeOperationUri, TObject content) { var objectContent = new ObjectContent <TObject>(content, _mediaTypeFormatters.XmlFormatter); using ( var response = await _httpClient.PostAsync(relativeOperationUri, objectContent)) { if (response.IsSuccessStatusCode) { return(await response.Content.ReadAsAsync <TResult>(_mediaTypeFormatters)); } switch (response.StatusCode) { case HttpStatusCode.Unauthorized: { throw ComputeApiException.InvalidCredentials( ((NetworkCredential)_clientMessageHandler.Credentials).UserName); } case HttpStatusCode.BadRequest: { // Handle specific CaaS Status response when posting a bad request var status = response.Content.ReadAsAsync <Status>(_mediaTypeFormatters).Result; throw ComputeApiException.InvalidRequest(status.operation, status.resultDetail); } default: { throw new HttpRequestException( String.Format( "CaaS API returned HTTP status code {0} ({1}) when performing HTTP POST on '{2}'.", (int)response.StatusCode, response.StatusCode, response.RequestMessage.RequestUri)); } } } }