net iformfile asp asp.net-core content-type asp.net-core-webapi

iformfile - Devolver imagen jpeg desde Asp.Net Core WebAPI



iformfile asp.net core (3)

Usando la API web principal de asp.net , quiero tener mi método de acción del controlador para devolver un flujo de imagen jpeg .
En mi implementación actual, el navegador solo muestra una cadena json . Mi expectativa es ver la imagen en el navegador.

Al realizar la depuración utilizando herramientas de desarrollo de Chrome, encontré que el tipo de contenido aún es

Content-Type:application/json; charset=utf-8

devuelto en el encabezado de respuesta, aunque en mi código configuro manualmente el tipo de contenido a "imagen / jpeg".

Buscando una solución Mi API web es la siguiente

[HttpGet] public async Task<HttpResponseMessage> Get() { var image = System.IO.File.OpenRead("C://test/random_image.jpeg"); var stream = new MemoryStream(); image.CopyTo(stream); stream.Position = 0; result.Content = new StreamContent(image); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); result.Content.Headers.ContentDisposition.FileName = "random_image.jpeg"; result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); result.Content.Headers.ContentLength = stream.Length; return result; }


PhysicalFile ayuda a devolver archivos desde Asp.Net Core WebAPI con una sintaxis simple

[HttpGet] public IActionResult Get(int imageId) { return new PhysicalFile(@"C:/test.jpg", "image/jpeg"); }


Solución limpia utilizar FilestreamResult !!

[HttpGet] public async Task<IActionResult> Get() { var image = System.IO.File.OpenRead("C://test/random_image.jpeg"); return File(image, "image/jpeg"); }

Explicación:

En ASP.NET Core, debe utilizar el método integrado de File() dentro del controlador. Esto le permitirá configurar manualmente el tipo de contenido.

No cree ni devuelva HttpResponseMessage , como estaba acostumbrado a utilizar en la API web ASP.NET 2. ¡No hace nada, ni siquiera genera errores!


[HttpGet("Image/{id}")] public IActionResult Image(int id) { if(id == null){ return NotFound(); } else{ byte[] imagen = "@C://test/random_image.jpeg"; return File(imagen, "image/jpeg"); } }