У меня есть следующая функция, которая форматирует некоторые данные в 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();
}