Kontynuując temat mam kolejny problem do rozwiązania. Obecne rozwiązanie wygląda tak i działa:
public ActionResult ExportSimpleCsv(int? businessLineId = 0)
{
IEnumerable<BusinessLineDataDTO> data = unitOfWork.BusinessLineAggregateDatas.GetDto(businessLineId);
Response.BufferOutput = false;
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
foreach (var s in data)
{
string isRejectedStr = s.IsRejected ? "YES" : "NO";
writer.WriteLine($"{s.Id};{s.ComplaintNumber};{isRejectedStr};{s.ReasonForRejection}");
}
stream.Position = 0;
return File(stream, "text/csv", $"Line{businessLineId}.csv");
}
Wołanie akcji z widoku:
@Html.ActionLink("Pobierz CSV", "ExportSimpleCsv", "Export", new { id = Model.Lines[i].Id });
W tym przypadku pod koniec generowania MemoryStream zajmuje ok. 100mb czyli tyle ile plik, który pobieramy. Jest to oczekiwane zachowanie, ale potrzebuję innego rozwiązania.
Domyślam się, że powinienem chyba zamiast z MemoryStream skorzystać z innego typu strumienia, który przekażę klientowi, a następnie asynchronicznie będę do tego strumienia pisał.
Przekopałem już kawał internetu i nie znalazłem rozwiązania.