Ao tentar retornar um arquivo de um controlador de API Web ASP.NET, você pode encontrar problemas com o resposta sendo tratada como JSON. Para resolver isso, é crucial entender a abordagem correta para download de arquivos no ASP.NET Core.
Para retornar um arquivo na API Web do ASP.NET Core, você precisa retornar um IActionResult derivado em vez de HttpResponseMessage. A estrutura interpretará HttpResponseMessage como um modelo, levando ao problema de resposta JSON.
Abaixo está um exemplo de código atualizado que demonstra como retornar um arquivo usando IActionResult:
[Route("api/[controller]")]
public class DownloadController : Controller
{
// GET api/download/12345abc
[HttpGet("{id}")]
public async Task Download(string id)
{
Stream stream = await GetStreamBasedOnIdAsync(id);
if (stream == null)
return NotFound(); // Returns a NotFoundResult with Status404NotFound response
return File(stream, "application/octet-stream", $"{FileName}.{FileExtension}"); // Returns a FileStreamResult
}
}
Nota: Não use uma instrução using para o stream; caso contrário, ele será descartado antes do envio da resposta, resultando em uma exceção ou resposta corrompida. A estrutura tratará do descarte de fluxo automaticamente quando a resposta for concluída.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3