Al intentar devolver un archivo desde un controlador ASP.NET Web API, puede encontrar problemas con el la respuesta se trata como JSON. Para resolver esto, es fundamental comprender el enfoque correcto para la descarga de archivos en ASP.NET Core.
Para devolver un archivo en ASP.NET Core Web API, debe devolver un IActionResult derivado en lugar de HttpResponseMessage. El marco interpretará HttpResponseMessage como modelo, lo que generará el problema de respuesta JSON.
A continuación se muestra un ejemplo de código actualizado que demuestra cómo devolver un archivo 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: No utilice una declaración de uso para la transmisión; de lo contrario, se eliminará antes de que se haya enviado la respuesta, lo que dará como resultado una excepción o una respuesta corrupta. El marco manejará la eliminación de la transmisión automáticamente cuando se complete la respuesta.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3