Baixar arquivo do controlador RedirectToAction ()

Eu tenho um aplicativo MVC 1.0 antigo que estou lutando com algo relativamente simples.

  1. Eu tenho uma visão que permite ao usuário fazer upload de um arquivo.
  2. Algum processamento do lado do servidor continua.
  3. Finalmente, um novo arquivo é gerado e baixado automaticamente para a máquina do cliente.

Eu tenho os passos 1 e 2 trabalhando. Eu não posso dar o passo final para o trabalho. Aqui está meu controlador:

[AcceptVerbs(HttpVerbs.Post)] public ViewResult SomeImporter(HttpPostedFileBase attachment, FormCollection formCollection, string submitButton, string fileName { if (submitButton.Equals("Import")) { byte[] fileBytes = ImportData(fileName, new CompanyExcelColumnData()); if (fileBytes != null) { RedirectToAction("DownloadFile", "ControllerName", new { fileBytes = fileBytes}); } return View(); } throw new ArgumentException("Value not valid", "submitButton"); } public FileContentResult DownloadFile(byte[] fileBytes) { return File( fileBytes, "application/ms-excel", string.Format("Filexyz {0}", DateTime.Now.ToString("yyyyMMdd HHmm"))); } 

O código é executado:

 RedirectToAction("DownloadFile", "ControllerName", new { fileBytes = fileBytes}); 

mas o arquivo não faz o download. Sugestões de boas-vindas e obrigado antecipadamente.

Tente retornar ActionResult , porque é a class mais abstrata da saída de ações. O ViewResult irá forçá-lo a retornar um View ou PartialView, portanto, um arquivo retornará uma exceção sobre o tipo implicitamente de conversão.

 [HttpPost] public ActionResult SomeImporter(HttpPostedFileBase attachment, FormCollection formCollection, string submitButton, string fileName { if (submitButton.Equals("Import")) { byte[] fileBytes = ImportData(fileName, new CompanyExcelColumnData()); if (fileBytes != null) { return File( fileBytes, "application/ms-excel", string.Format("Filexyz {0}", DateTime.Now.ToString("yyyyMMdd HHmm"))); } return View(); } throw new ArgumentException("Value not valid", "submitButton"); } 

Por que RedirectToAction? Você pode retornar a ação File from SomeImporter, apenas altere o tipo de retorno de SomeImporter para FileContentResult.