У меня есть сервер веб-API ASP. NET, написанный на C# (v2.2). Один из моих открытых методов, создание MemoryStream
и добавление в него данных. В конце верните его методом return File(ms)
.
Мой код выглядит следующим образом:
[HttpGet]
[Route("my-endpoint")]
public async Task<ActionResult> TestMe()
{
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
await sw.WriteLineAsync($"A,B,C").ConfigureAwait(false);
await sw.WriteLineAsync($"1,2,3").ConfigureAwait(false);
await sw.FlushAsync().ConfigureAwait(false);
ms.Seek(0, SeekOrigin.Begin);
return File(ms, "application/csv");
}
Проблема здесь в том, что этот код не удаляет весь поток из памяти для конечно. В случае, если все было в порядке, поток будет закрыт кодом ASP. NET. Если было сгенерировано исключение, поток не будет удален.
Я думал, что правильный способ его реализации будет (этот код НЕ работает):
[HttpGet]
[Route("my-endpoint")]
public async Task<ActionResult> TestMe()
{
using (MemoryStream ms = new MemoryStream())
using (StreamWriter sw = new StreamWriter(ms))
{
await sw.WriteLineAsync($"A,B,C").ConfigureAwait(false);
await sw.WriteLineAsync($"1,2,3").ConfigureAwait(false);
await sw.FlushAsync().ConfigureAwait(false);
ms.Seek(0, SeekOrigin.Begin);
return File(ms, "application/csv");
}
}
Проблема вот когда мы покидаем функцию (в строке return
). Затем поток будет удален, прежде чем будет возвращен клиенту.
Как заставить мой код работать безопасно?