private async Task <HttpResponseMessage> sendRequest(HttpMethod method, string path, string body)
        {
            HttpRequestMessage request = null;

            try
            {
                var        pathAndQuery = path.Split(new char[] { '?' });
                UriBuilder uriBuilder   = new UriBuilder(clientSchema, hostname, hostPort, basePath + pathAndQuery[0]);
                if (pathAndQuery.Length > 1)
                {
                    uriBuilder.Query = pathAndQuery[1];
                }

                request = new HttpRequestMessage(method, uriBuilder.Uri);
                request.Headers.Add("Authorization", credentialHandler.GetAuthenticationToken());
                request.Headers.Add("X-MNUBO-SDK", this.version);

                if (!string.IsNullOrEmpty(body))
                {
                    if (compressionEnabled)
                    {
                        var data   = Encoding.UTF8.GetBytes(body);
                        var stream = new MemoryStream();
                        using (var gz = new GZipStream(stream, CompressionMode.Compress))
                        {
                            await gz.WriteAsync(data, 0, data.Length);
                        }

                        var compressed = stream.ToArray();
                        stream.Dispose();

                        request.Content = new ByteArrayContent(compressed);
                        request.Content.Headers.ContentEncoding.Add("gzip");
                    }
                    else
                    {
                        request.Content = new StringContent(body, Encoding.UTF8);
                    }

                    request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                }
                return(await client.SendAsync(request));
            }
            finally
            {
                if (request != null)
                {
                    request.Dispose();
                }
            }
        }
Beispiel #2
0
        internal async Task <string> sendAsyncRequestWithResult(HttpMethod method, string path, string body)
        {
            HttpRequestMessage  request  = null;
            HttpResponseMessage response = null;

            try
            {
                UriBuilder uriBuilder = new UriBuilder(DefaultClientSchema, HttpClient.addressMapping[enviroment], DefaultHostPort, DefaultBasePath + path);

                request = new HttpRequestMessage(method, uriBuilder.Uri);
                request.Headers.Add("Authorization", credentialHandler.GetAuthenticationToken());

                if (!string.IsNullOrEmpty(body))
                {
                    request.Content = new StringContent(body, Encoding.UTF8, "application/json");
                }

                response = await client.SendAsync(request);

                string message = await response.Content.ReadAsStringAsync();

                if (response.StatusCode == HttpStatusCode.OK ||
                    response.StatusCode == HttpStatusCode.Created)
                {
                    return(message);
                }
                else if (response.StatusCode == HttpStatusCode.BadRequest)
                {
                    throw new ArgumentException(GetMessageFromReponse(message));
                }

                throw new InvalidOperationException(
                          string.Format("status code: {0}, message {1}", response.StatusCode, GetMessageFromReponse(message)));
            }
            finally
            {
                if (request != null)
                {
                    request.Dispose();
                }
                if (response != null)
                {
                    response.Dispose();
                }
            }
        }
Beispiel #3
0
        internal async Task <string> sendAsyncRequestWithResult(HttpMethod method, string path, string body)
        {
            HttpRequestMessage  request  = null;
            HttpResponseMessage response = null;

            try
            {
                var        pathAndQuery = path.Split(new char[] { '?' });
                UriBuilder uriBuilder   = new UriBuilder(clientSchema, hostname, hostPort, basePath + pathAndQuery[0]);
                if (pathAndQuery.Length > 1)
                {
                    uriBuilder.Query = pathAndQuery[1];
                }

                request = new HttpRequestMessage(method, uriBuilder.Uri);
                request.Headers.Add("Authorization", credentialHandler.GetAuthenticationToken());

                if (!string.IsNullOrEmpty(body))
                {
                    if (compressionEnabled)
                    {
                        var data   = Encoding.UTF8.GetBytes(body);
                        var stream = new MemoryStream();
                        using (var gz = new GZipStream(stream, CompressionMode.Compress))
                        {
                            await gz.WriteAsync(data, 0, data.Length);
                        }

                        var compressed = stream.ToArray();
                        stream.Dispose();

                        request.Content = new ByteArrayContent(compressed);
                        request.Content.Headers.ContentEncoding.Add("gzip");
                    }
                    else
                    {
                        request.Content = new StringContent(body, Encoding.UTF8);
                    }

                    request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                }

                response = await client.SendAsync(request);

                string message = await response.Content.ReadAsStringAsync();

                if (response.StatusCode == HttpStatusCode.OK ||
                    response.StatusCode == HttpStatusCode.Created ||
                    (int)response.StatusCode == 207)
                {
                    return(message);
                }
                else if (response.StatusCode == HttpStatusCode.BadRequest)
                {
                    throw new ArgumentException(message);
                }

                throw new InvalidOperationException(
                          string.Format("status code: {0}, message {1}", response.StatusCode, message));
            }
            finally
            {
                if (request != null)
                {
                    request.Dispose();
                }
                if (response != null)
                {
                    response.Dispose();
                }
            }
        }