Я хочу создать ответ с потоком файла в моем контроллере API.
После завершения действия я хочу удалить файл.
FileInfo fileInfo = null;
var streamCopy = new MemoryStream();
try
{
fileInfo = this.myService.CreateExcelExportFile(exportModel, temporaryImageDirectory);
using (var streamIn = fileInfo.OpenRead())
{
await streamIn.CopyToAsync(streamCopy);
}
}
catch (Exception ex)
{
throw new DomainException("");
}
finally
{
fileInfo?.Delete();
}
var result = this.Request.CreateResponse(HttpStatusCode.OK);
result.Content = new StreamContent(streamCopy);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
return result;
В этом сценарии я всегда получаю файл с нулевым байтом.
Я подозреваю, что это связано с тем, что streamCopy памяти распределяется до того, как ответ действительно будет доставлен.
Но чтобы удалить файл, мне нужно создать копию данных, закрыть начальный StreamReader, а затем удалить файл.
Я знаю, что не должен закрывать StreamReader где
result.Content = new StreamContent (streamCopy);
зависит от в контроллере из-за утилизации.
Как мне решить эту проблему?