"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como retornar arquivos de um controlador de API Web ASP.NET Core?

Como retornar arquivos de um controlador de API Web ASP.NET Core?

Publicado em 2024-11-09
Navegar:736

How to Return Files from an ASP.NET Core Web API Controller?

Lidando com downloads de arquivos na API Web ASP.NET Core

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.

Tutorial mais recente Mais>

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