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