Правильный способ сжатия содержимого PUT из .NET HttpClient? - PullRequest
0 голосов
/ 17 мая 2018

Мне не удалось найти подробную информацию об использовании .NET HttpClient для отправки сжатых PUT.У меня есть класс сжатия Gzip, который может сжимать байтовые массивы, но я не уверен, что что-то вроде приведенного ниже является правильным способом:

    public HttpRequestMessage GetHttpPutRequestMessage(string uri, string dataToPut, string username, string password)
    {
        var request = SetupHttpRequestMessage(HttpMethod.Put, uri, username, password);

        byte[] bytesToSend = _useCompression ? 
            _compressionService.Compress(Encoding.ASCII.GetBytes(dataToPut)) : Encoding.ASCII.GetBytes(dataToPut);

        request.Content = new ByteArrayContent(bytesToSend, 0, bytesToSend.Length);

        return request;
    }

    private HttpRequestMessage SetupHttpRequestMessage(HttpMethod method, string uri, string username, string password)
    {
        var request = new HttpRequestMessage(method, uri);
        var byteArray = Encoding.ASCII.GetBytes(username + ":" + password);
        request.Headers.Authorization =
            new AuthenticationHeaderValue(
                "Basic", Convert.ToBase64String(byteArray));

        request.Headers.ExpectContinue = false;

        if (_usingEmulator)
            request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(_contentType));

        if (_useCompression)
        {
            request.Headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
            request.Headers.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));
        }

        return request;
    }

Класс сжатия очень прост.Метод сжатия ниже:

    public byte[] Compress(byte[] data)
    {
        using (var compressedStream = new MemoryStream())
        {
            using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress))
            {
                zipStream.Write(data, 0, data.Length);
                zipStream.Close();
                return compressedStream.ToArray();
            }
        }
    }
...