通过HTTP发送压缩文件(gzip)会弄乱编码

通过HTTP发送压缩文件(gzip)会弄乱编码,http,asp.net-core,Http,Asp.net Core,我有一个压缩文件。 如何将其发送到浏览器并使其解码 ASP.NET核心支持如下压缩: services.AddResponseCompression(); ... app.UseResponseCompresssion app.Run(async (context) => { var file = System.IO.File.ReadAllText("file.txt"); await context.Response.WriteAsync(file); }); 但是我

我有一个压缩文件。 如何将其发送到浏览器并使其解码

ASP.NET核心支持如下压缩:

services.AddResponseCompression();
...
app.UseResponseCompresssion
app.Run(async (context) =>
{
    var file = System.IO.File.ReadAllText("file.txt");
    await context.Response.WriteAsync(file);
});
但是我的文件已经被压缩了。我试着只设置标题,读取文件并发送内容,但这会弄乱编码

app.Run(async (context) =>
{
    context.Response.Headers.Add("Content-Type", "text/plain");
    context.Response.Headers.Add("Content-Encoding", "gzip");
    context.Response.Headers.Add("Vary", "Accept-Encoding");
    var file = System.IO.File.ReadAllText("compressed.gz");
    await context.Response.WriteAsync(file);
});
如果我只是发送文件,firefox和chrome会尝试下载,但不会解压缩

证明:

$ cat compressed.gz | hexdump | head -1
0000000 8b1f 0808 3768 5bc6 0302 6966 656c 742e
# that's the magic number: 8b 1f 08

$ curl -X GET   http://localhost:5000/  -H 'Accept-Encoding: gzip'   -H 'Cache-Control: no-cache'  --output - | hexdump | head -1
0000000 ef1f bdbf 0808 3768 bfef 5bbd 0302 6966

如何防止编码问题?

正如@t.niese指出的,问题在于逐行阅读文本。
执行此任务的正确方法是返回
FileStreamResult

例如:

Response.Headers["Content-Encoding"] = "gzip";
return new FileStreamResult(new FileStream(fileName, FileMode.Open), "text/plain");

您可以添加一些代码来显示您尝试了什么以及出现了什么问题吗?尽量提供帮助:-)我昨天很忙,对不起!我不知道asp.net,但是与读取二进制文件相结合,
ReadAllText
看起来很可疑。@t.niese OMG,真是个愚蠢的错误!非常感谢你!如果您认为这可能会在将来帮助其他人,那么从中创建一个答案,显示正确的函数调用是什么,并接受该答案。