Using asp.net core web api, I want to have my controller action method to return an jpeg image stream.
In my current implementation, browser displays only a json string. My expectation is to see the image in the browser.
While debugging using chrome developer tools I found that the content type is still
Content-Type:application/json; charset=utf-8
returned in the response header, even though in my code I manually set the content type to "image/jpeg".
Looking for a solution My Web API is as below
[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; }
In order to return images stored directly in a SQL Server database from an ASP.NET Web API you need to create a Get() method that returns HttpResponseMessage. The Content property of the HttpResponseMessage class represents the binary image data associated with an image.
NET Core. In . NET Core, you don't need to create " HttpResponseMessage " to return images from API, it will not return you data, also it will not throw any error, you have to use File() method directly inside the Controller. Basically, the API will accept a query string which is the file name.
Depending on which of these is returned, Web API uses a different mechanism to create the HTTP response. Convert directly to an HTTP response message. Call ExecuteAsync to create an HttpResponseMessage, then convert to an HTTP response message. Write the serialized return value into the response body; return 200 (OK).
Clean solution use FilestreamResult
!!
[HttpGet] public IActionResult Get() { var image = System.IO.File.OpenRead("C:\\test\\random_image.jpeg"); return File(image, "image/jpeg"); }
Explanation:
In ASP.NET Core you have to use the built-in File()
method inside the Controller. This will allow you to manually set the content type.
Don't create and return HttpResponseMessage
, like you were used to using in ASP.NET Web API 2. It doesn't do anything, not even throwing errors!!
PhysicalFile helps to return file from Asp.Net Core WebAPI with a syntax simple
[HttpGet] public IActionResult Get(int imageId) { return PhysicalFile(@"C:\test.jpg", "image/jpeg"); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With