【发布时间】:2014-03-19 21:59:21
【问题描述】:
我想发出一个包含压缩负载数据的 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