2016-08-27 2 views
12

Мне нужно вернуть изображение с помощью метода Web API Get. Код, кажется, работает отлично, за исключением того, что я получаю это сообщение в окне ImageView Fiddler: «Этот ответ закодирован, но не претендует на роль изображения».Как вернуть изображение с помощью Web API Метод Get

public HttpResponseMessage Get() 
{ 
    using (FileStream fs = new FileStream(filePath, FileMode.Open)) 
    { 
     HttpResponseMessage response = new HttpResponseMessage(); 
     response.Content = new StreamContent(fs); 
     response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 
     return response; 
    } 
} 

я вижу один и тот же результат в Скрипач с этим кодом также:

public HttpResponseMessage Get() 
{ 
    HttpResponseMessage response = new HttpResponseMessage(); 
    Byte[] b = (GetImageByteArray()); 
    response.Content = new ByteArrayContent(b); 
    response.Content.LoadIntoBufferAsync(b.Length).Wait(); 
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 
    return response; 
} 

я получаю тот же результат, если я использую .png формат.

Цените вашу помощь,

+0

Не могли бы вы предоставить подробную информацию о методе GetImageByteArray()? Также вы уверены, что изображение, которое вы читаете, - это изображение jpeg/jpg, а не изображение другого формата? – dotnetstep

ответ

21

Если я правильно понимаю, то вы спрашиваете специфичные для ядра ASP.NET. В ядре ASP.net HttpResponseMessage не является способом вернуть результат так, как мы это делали в ASP.net web api 2.

В ядре asp.net (WEB API) просто выглядите так.

[HttpGet] 
public IActionResult Get() 
{    
    Byte[] b = System.IO.File.ReadAllBytes(@"E:\\Test.jpg"); // You can use your own method over here.   
    return File(b, "image/jpeg"); 
} 

Примечание: «его ответ кодируется, но не претендует на образ» Как вы говорите, что в Скрипач ImageView вы видите сообщение, как этот потому что ядро ​​ASP.net рассматривает HttpResponseMessage как простой класс и конвертирует в json или xml.

+0

Ну, что считается окончательным результатом. Ваш код делает это очень хорошо. Черт с HttpResponseMessage. :-) Я собираюсь отметить это как правильный ответ. Большое спасибо, –

+3

Лучше использовать перегрузку метода 'File', которая принимает поток, таким образом вы не должны загружать изображение в память серверов перед его отправкой. 'FileStream stream = File.Open (@" E: \\ Test.jpg "); return file (stream, "image/jpeg"); 'или даже проще:' return PhysicalFile ("@ E: \\ Test.jpg", "image/jpg"); 'https://github.com/aspnet/ Mvc/BLOB/DEV/SRC/Microsoft.AspNetCore.Mvc.Core/ControllerBase.cs # L711 – Tseng

Смежные вопросы