ASP.net MVC ActionResult corrompt le file excel lors du return de MemoryStream

J'ai l'action suivante dans mon controller

public ActionResult DownloadExcel() { //create and populate Excel file here C1XLBook testBook = new C1XLBook(); //populate it here MemoryStream ms = new MemoryStream(); testBook.Save(ms, FileFormat.Biff8); return File(ms, "application/ms-excel", "test-file.xls"); } 

Lors de l'ouverture du file, je reçois le message Excel indiquant que le file ne correspond pas à l'extension et que le file s'ouvre corrompu.

Si je sauvegarde le file sur le disque dur et le returnne de là, tout va bien:

 return base.File(@"C:\LOGS\test-file.xls", "application/ms-excel", "test-excel.xls"); 

J'ai d'abord pensé que la fonction Enregistrer la corrompait lors de la sauvegarde dans MemoryStream, donc j'ai sauvegardé et remis en charge et il était bien passé à l'user – lorsqu'il a été enregistré sur le disque dur et est returnné de là, plutôt que de le MemoryStream

Des idées? Je ne suis pas trop friands de sauvegarder le file sur le disque dur …. en plus, je devrais pouvoir le sauvegarder dans MemoryStream et le renvoyer à partir de là?

Un problème que j'ai est que peut-être que MemoryStream ne devrait pas être utilisé pour renvoyer des files dans MVC, car chaque request est isolée?

Peut-être que vous devez rebobiner le stream de memory (définir ms.Position = 0; ) avant de le transmettre au résultat? Après l'appel à Save sa position sera à la fin, pas le début.