Как передать HTTP-ответ при записи в тот же поток? - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть следующая функция, которая форматирует некоторые данные в 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...