【问题标题】:HttpClient reading custom HttpContent typeHttpClient 读取自定义 HttpContent 类型
【发布时间】:2012-09-11 19:37:22
【问题描述】:

在服务器上,我使用自定义消息处理程序强制压缩。处理程序检查Accept-Encoding 标头,如果支持(例如GZip),则将HttpResponseMessage.Content 替换为CompressedContent 的实例。这只是像这样压缩原始内容:

protected override async Task SerializeToStreamAsync(Stream stream, TransportContext context)
{
    Ensure.Argument.NotNull(stream, "stream");

    using (content) // original content
    {
        // creates a new GZip/Deflate stream
        var compressed = GetStream(CompressionMode.Compress, stream);
        await content.CopyToAsync(compressed);
        compressed.Dispose();
    }
}

在客户端,我们可以通过检查Content-Encoding标头并使用另一个HttpContent类型进行解压来实现解压:

protected async override Task SerializeToStreamAsync(Stream stream, TransportContext context)
{
    Ensure.Argument.NotNull(stream, "stream");

    using (content)
    {
        var compressed = await content.ReadAsStreamAsync();
        var decompressed = GetStream(CompressionMode.Decompress, compressed);
        await decompressed.CopyToAsync(stream);
        decompressed.Dispose();
    }
}

我不确定的部分是我们是否应该使用自定义HttpContent 类型来进行解压。在服务器上这样做是有意义的,因为我们真的没有其他方式来接触响应流。然而,在客户端,这可以通过直接解压缩标准 StreamContent 或使用自定义 HttpClient 实现来完成。

【问题讨论】:

标签: asp.net-web-api dotnet-httpclient


【解决方案1】:

消息处理程序也可以在客户端上使用,与HttpClient 一起处理请求/响应。在您的情况下,为服务器上发生的事情提供反向过程很有用。

这是 ASP.NET Web API 的美丽对称。

这里有一篇关于客户端消息处理程序的精彩文章 - http://byterot.blogspot.ch/2012/06/aspnet-web-api-client-delegating.html

另一个例子可以在这里找到,在 Henrik 的博客上 - 它有点旧(相对于测试版),但要点仍然相同:http://blogs.msdn.com/b/henrikn/archive/2012/02/16/extending-httpclient-with-oauth-to-access-twitter.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多