Problema
Desejo retornar um arquivo no meu controlador de API da Web do ASP.Net, mas todas as minhas abordagens retornam HttpResponseMessage
como JSON.
Código até agora
public async Task<HttpResponseMessage> DownloadAsync(string id)
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StreamContent({{__insert_stream_here__}});
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
return response;
}
Quando chamo esse terminal no meu navegador, a API da Web retorna HttpResponseMessage
como JSON com o cabeçalho de conteúdo HTTP definido como application/json
.
c#
asp.net-core
.net-core
asp.net-core-webapi
Jan Kruse
fonte
fonte
return File(stream, "application/octet-stream", "filename.xlsx");
Dessa forma, ao fazer o download, o usuário pode abri-lo diretamente.NotFound()
isso faz, mas ele reside no .NET Core ou é algo local no seu projeto?ControllerBase
e faz parte da própria estrutura docs.microsoft.com/en-us/dotnet/api/…Controller
e, portanto, não tinha acesso aoControllerBase.NotFound()
método. Uma vez derivado, tudo funcionou. lol / thxVocê pode retornar o FileResult com estes métodos:
fonte
ControllerBase
existem muitas versões sobrecarregadas doControllerBase.File
helper que retornam qualquer uma delas.Aqui está um exemplo simplista de streaming de um arquivo:
Nota:
Certifique-se de usar
FileStreamResult
deMicrosoft.AspNetCore.Mvc
e não deSystem.Web.Mvc
.fonte