首页 > 解决方案 > 如何在写入同一流时流式传输 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使用此代码。我想要实现的是以datacsv 连续流式传输。

编辑:

顺便说一句,我目前正在按照约翰的建议进行如下操作。但是,这实际上是流数据还是先将所有内容写入响应主体然后发送最终响应?我的理解是后者。

[HttpGet]
public async Task<IActionResult> GetCsvStream()
{
   var data = // code to get raw data.

   WriteToStream(data, this.HttpContext.Response.Body);

   return this.Ok();
}

标签: c#streamasp.net-core-2.1

解决方案


推荐阅读