Retornar um arquivo para Visualizar / Baixar no ASP.NET MVC

Estou com um problema ao enviar arquivos armazenados em um banco de dados de volta ao usuário no ASP.NET MVC. O que eu quero é uma visualização listando dois links, um para visualizar o arquivo e permitir que o tipo de mim enviado ao navegador determine como ele deve ser tratado e o outro para forçar um downloa

Se eu optar por visualizar um arquivo chamadoSomeRandomFile.bak e o navegador não possui um programa associado para abrir arquivos desse tipo, então não tenho nenhum problema com o padrão de comportamento do download. No entanto, se eu optar por exibir um arquivo chamadoSomeRandomFile.pdf ouSomeRandomFile.jpg Eu quero que o arquivo seja simplesmente aberto. Mas também quero manter um link de download ao lado para poder forçar um prompt de download, independentemente do tipo de arquivo. Isso faz sentido

Eu tenteiFileStreamResult e funciona para a maioria dos arquivos, seu construtor não aceita um nome de arquivo por padrão; portanto, arquivos desconhecidos recebem um nome de arquivo com base no URL (que não sabe a extensão a ser atribuída com base no tipo de conteúdo). Se forçar o nome do arquivo especificando-o, perco a capacidade do navegador de abrir o arquivo diretamente e recebo uma solicitação de download. Mais alguém encontrou isso

Estes são os exemplos do que eu tentei até agor

//Gives me a download prompt.
return File(document.Data, document.ContentType, document.Name);

//Opens if it is a known extension type, downloads otherwise (download has bogus name and missing extension)
return new FileStreamResult(new MemoryStream(document.Data), document.ContentType);

//Gives me a download prompt (lose the ability to open by default if known type)
return new FileStreamResult(new MemoryStream(document.Data), document.ContentType) {FileDownloadName = document.Name};

Alguma sugestão

questionAnswers(8)

yourAnswerToTheQuestion