首页 > 解决方案 > 如何从控制器刷新 HTTP 标头?

问题描述

我想将 .csv 导出文件流式传输到客户端。我需要将 HTTP 标头发送到客户端,以便客户端显示下载文件。然后我想开始将 .csv 文件流式传输到客户端。

下面的代码对我不起作用。该方法Response.Body.Flush()重复整个ExecuteExport()方法。

public FileStreamResult ExecuteExport()
{
    Response.Headers.Add("Content-type", "someType");
    Response.Headers.Add("Content-disposition", "export.csv");

    // Trying to flush Http Headers
    Response.Body.Flush();

    MemoryStream outputStream = new MemoryStream();

    // Start exporting and streaming .csv file to client
    this.ExportAndStream(ref outputStream);

    return new FileStreamResult(outputStream, type)
    {
        FileDownloadName = "export.csv"
    };
}

标签: c#asp.net-corehttp-headers.net-coreexport-to-csv

解决方案


如果要清除Headers,则不应刷新Body... 一方面,刷新确保所有当前缓冲的输出都发送到客户端。其次,body != headers。

您可以使用HttpResponse.ClearHeaders 方法

清除缓冲区流中的所有标头。

请务必在添加标题之前清除标题:

Response.ClearHeaders();
Response.Headers.Add("Content-type", "someType");
Response.Headers.Add("Content-disposition", "export.csv");

推荐阅读