Все, что вам нужно сделать, это сбросить позицию потока.stream.Position = 0;
Вы не должны писать прямо в ответ , это не путь MVC.Он не следует правильному конвейеру MVC и тесно связывает код действия вашего контроллера с объектом Response.
Когда вы добавляете имя файла в качестве третьего параметра в File()
, MVC автоматически добавляет правильные Content-Disposition
header ... так что вам не нужно добавлять его вручную.
Короче говоря, это то, что вы хотите:
public ActionResult Index()
{
using (ExcelPackage package = new ExcelPackage())
{
// I populate the worksheet here. I'm 90% sure this is fine
// because the stream file size changes based on what I pass to it.
var stream = new MemoryStream();
package.SaveAs(stream);
string fileName = "myfilename.xlsx";
string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
stream.Position = 0;
return File(stream, contentType, fileName);
}
}