写入同一流时如何流HTTP响应?

时间:2018-12-31 06:31:00

标签: c# stream asp.net-core-2.1

我具有以下一些功能,可将某些数据格式化为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();
}

0 个答案:

没有答案