Мне не удалось найти подробную информацию об использовании .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();
}
}
}