2014-02-19 1 views
1

Я хотел бы сделать 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 не говорит, что полезная нагрузка запроса сжимается.

Я что-то пропустил?

+0

+1 для правильного удаления «MemoryStream» –

ответ

-1

Ваш клиент должен отправить правильные принимающие заголовки для дефляции; это не просто серверная штука. См. Страницу Википедии: http://en.wikipedia.org/wiki/HTTP_compression

+1

Прошу прощения, но ваш ответ не то, о чем я просил. Я хочу знать, как сделать работу сжатия запроса. Учет сжатого ответа здесь не представляет интереса. –

Смежные вопросы