c#-4.0 - 编写要在 Web API MessageHandler 中使用的解压缩机制

标签 c#-4.0 asp.net-web-api

我正在尝试为 Web API MessageHandler 编写一个解压缩机制。然而,尽管进行了一些研究,我似乎无法完成这项工作:-(

通过以下测试可以重现该问题:

[Test]
public void Deflate()
{
    using (var outStream = new MemoryStream())
    {
        using (var compressionStream = new DeflateStream(outStream, CompressionMode.Compress, true))
        {
            using (var original = new MemoryStream(Encoding.UTF8.GetBytes("original content")))
            {
                original.CopyTo(compressionStream);
            }
        }
        //this passes
        Assert.IsTrue(outStream.Length > 0);

        var compressedStream = outStream;
        var decompressionResultStream = compressedStream.DeflateDecompressor();

        //this fails
        Assert.IsTrue(decompressionResultStream.Length > 0);

        var output = Encoding.UTF8.GetString(decompressionResultStream.ToArray());
        Assert.AreEqual("original content", output);
    }
}

以及以下解压缩处理程序

public static class DecompressionHandlers
{
    public static MemoryStream DeflateDecompressor(this Stream compressedStream)
    {
        var decompressionResultStream = new MemoryStream();
        using (var decompressionStream = new DeflateStream(compressedStream, CompressionMode.Decompress, true))
        {
            decompressionStream.CopyTo(decompressionResultStream);
            decompressionStream.Flush();
        }
        return decompressionResultStream;
    }

    public static MemoryStream GZipDecompressor(this Stream compressedStream)
    {
        var decompressionResultStream = new MemoryStream();
        using (var decompressionStream = new GzipStream(compressedStream, CompressionMode.Decompress, true))
        {
            decompressionStream.CopyTo(decompressionResultStream);
            decompressionStream.Flush();
        }
        return decompressionResultStream;
    }
}

希望这是一个直接的 ID-10-T 问题,非常感谢您提供任何建议!

这将在 Web API MessageHandler 中使用,这很可能是转移注意力,但为了完整性而包含在内

最佳答案

在您的代码中,在调用解压缩之前尝试重置 compressedStream 的位置。

compressedStream.Position = 0;
var decompressionResultStream = compressedStream.DeflateDecompressor();

请注意,您似乎在 GZipDecompressor 方法中使用 DeflateStream 而不是 GZipStream。

关于c#-4.0 - 编写要在 Web API MessageHandler 中使用的解压缩机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21730391/

相关文章:

c# - 使用 C# 从 excel 写入文本文件

java - 如何将Java代码转换为C#代码?

c# - 为什么当我将类转换为它未实现的接口(interface)时没有编译器错误?

c# - 在 EF 的 ASP.Net WebAPI 方法中使用 Async 有什么好处?

c# - dnn WebApi - DnnAuthorize 方法不起作用?

c# - web api 2中Data Member和JsonProperty的区别

winforms - 使用 System.Media.SoundPlayer.PlaySync() 和 AxWindowsMediaPlayer 并行播放声音

winforms - DataGridView右键菜单/复制示例?

paypal - 有没有实时paypal ipn服务

c# - 启动/停止 OWIN 中间件?