Возвращение jpeg-изображения из Asp.Net Core WebAPI

Используя asp.net core web api, я хочу, чтобы мой метод действия контроллера возвращал поток изображения jpeg.
В моей текущей реализации браузер отображает только строку json. Мое ожидание - увидеть изображение в браузере.

Во время отладки с использованием хром-инструментов для разработчиков я обнаружил, что тип контента по-прежнему

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

возвращенный в заголовке ответа, хотя в моем коде я вручную задал тип контента "image/jpeg".

Поиск решения. Мой веб-интерфейс выглядит так:

    [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;
    }

enter image description here

Ответы

Ответ 1

Чистое решение использовать FilestreamResult !

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

Объяснение:

В ASP.NET Core вы должны использовать встроенный метод File() внутри контроллера. Это позволит вам вручную установить тип контента.

Не создавайте и не возвращайте HttpResponseMessage, как вы привыкли использовать в ASP.NET Web API 2. Он ничего не делает, даже не выдает ошибок !!

Ответ 2

PhysicalFile помогает вернуть файл из Asp.Net Core WebAPI с синтаксисом простой

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

Ответ 3

[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");
        }
    }