Я хотел бы сделать HTTP-запрос, содержащий сжатые данные полезной нагрузки.HTTP-запрос, объявленный как дефлят, не работает
Реализация HttpContent
класса выглядит следующим образом:
public class DeflateJsonContent<T> : HttpContent
{
private readonly MemoryStream _sink = new MemoryStream();
public DeflateJsonContent(T model)
{
Headers.ContentType = new MediaTypeHeaderValue("application/json");
Headers.Add("Content-Encoding", "deflate");
using(var deflate = new DeflateStream(_sink, CompressionMode.Compress, true))
{
Json.Serialize(deflate, model, true);
}
_sink.Seek(0, SeekOrigin.Begin);
}
protected override Task SerializeToStreamAsync(Stream destination, TransportContext context)
{
return _sink.CopyToAsync(destination);
}
protected override bool TryComputeLength(out long length)
{
length = _sink.Length;
return true;
}
protected override void Dispose(bool disposing)
{
_sink.Dispose();
base.Dispose(disposing);
}
}
Запрос выглядит следующим образом:
private Task<HttpResponseMessage> PostDeflateJsonContentAsync(string uri, HttpContent content, CancellationToken token)
{
return _http.PostAsync(uri, content, token);
}
При осмотре связи с использованием Fiddler я вижу, что нет «выкачивает» в заголовки запроса. Кроме того, Fiddler не говорит, что полезная нагрузка запроса сжимается.
Я что-то пропустил?
+1 для правильного удаления «MemoryStream» –