Ejemplo n.º 1
0
        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));
                }
                }
            }
        }
Ejemplo n.º 2
0
        /// <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));
                }
                }
            }
        }