Esempio n. 1
0
        public async Task <HttpResponseMessage> SendRequest(HttpMethod method, string path, string body)
        {
            HttpRequestMessage request = null;

            try
            {
                var pathAndQuery = path.Split(new char[] { '?' });
                var 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
            {
                request?.Dispose();
            }
        }