c# - 如何从控制器刷新 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"
};
}
解决方案
如果要清除Headers
,则不应刷新Body
... 一方面,刷新确保所有当前缓冲的输出都发送到客户端。其次,body != headers。
您可以使用HttpResponse.ClearHeaders 方法
清除缓冲区流中的所有标头。
请务必在添加标题之前清除标题:
Response.ClearHeaders();
Response.Headers.Add("Content-type", "someType");
Response.Headers.Add("Content-disposition", "export.csv");
推荐阅读
- dart - Flutter TextInputFormatter 没有做预期的事情
- ios - 如何取消 LongPressGestureRecognizer?
- artificial-intelligence - 如何使用 NLTK 从头开始构建 AI 聊天机器人?
- c# - 模态/部分视图英国日期冲突MVC5
- amazon-web-services - AWS S3 文件上传导致“403 Forbidden”响应:AccessDenied
- debugging - 如何从 TRACE32 导出变量值
- c# - 如何在 C# 中读取 json 子节点
- python - 性能 - 为什么具有范围的素数生成算法比使用素数列表快得多?
- apache-kafka - 如何克隆 Kafka Connect 中的字段?
- cordova - 拒绝加载脚本'architect://architect.js'