c# - 如何在写入同一流时流式传输 HTTP 响应?
问题描述
我有一些以下函数将一些数据格式化为 csv:
public static void WriteToStream(IEnumerable<MyClass> data, Stream stream)
{
var writer = new StreamWriter(stream);
foreach(var record in data)
{
var line = // code that generates the csv line.
writer.WriteLine(line);
}
}
在我的 REST 控制器方法中,我试图将此流作为响应发送。我正在尝试以下操作:
[HttpGet]
public async Task<IActionResult> GetCsvStream()
{
var data = // code to get raw data.
var stream = new MemoryStream();
WriteToStream(data, stream);
return new FileStreamResult(stream, "text/csv");
}
但是,我正在Internal Server Error
使用此代码。我想要实现的是以data
csv 连续流式传输。
编辑:
顺便说一句,我目前正在按照约翰的建议进行如下操作。但是,这实际上是流数据还是先将所有内容写入响应主体然后发送最终响应?我的理解是后者。
[HttpGet]
public async Task<IActionResult> GetCsvStream()
{
var data = // code to get raw data.
WriteToStream(data, this.HttpContext.Response.Body);
return this.Ok();
}
解决方案
推荐阅读
- javascript - 从数据库中获取值并使用列表将其填充到基于另一个下拉值的下拉列表中
- c++ - 如何在 imgui 窗口中使用 opengl glfw3 渲染?
- c - Clear just bit field members of a struct?
- javascript - CRUD:如何删除包含所有产品的产品类别?
- angular - 如何动态创建角度服务的实例?
- spring - 创建名为 EntityManagerFactory 的 Bean 时出错
- spring - 如何在控制器中检索当前用户的所有数据?
- linux - Netplan ipv6“没有到主机的路由”
- python - 使用 doctest 测试 Python 代码时出现意外错误
- java - 在 MapView 的 android 应用程序中添加指南针校准选项