2016-08-27 6 views
12

Potrzebuję zwrócić obraz za pomocą metody API Web API Pobierz. Poniższy kod wydaje się działać dobrze, z wyjątkiem tego, że otrzymuję tę wiadomość w oknie ImageView Fiddlera: "Ta odpowiedź jest zakodowana, ale nie twierdzi, że jest obrazem".Jak zwrócić obraz z Web API Pobierz metodę

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

widzę ten sam rezultat w Skrzypek z tego kodu również:

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

uzyskać ten sam rezultat, jeśli mogę użyć formatu .png.

wdzięczni za pomoc,

+0

Czy możesz podać szczegóły dotyczące metody GetImageByteArray()? Czy jesteś pewien, że obraz, który czytasz, jest w formacie jpeg/jpg, a nie w innym formacie? – dotnetstep

Odpowiedz

21

Jeśli dobrze rozumiem, potem prosisz specyficzne dla rdzenia ASP.NET. W rdzeniu ASP.net HttpResponseMessage nie jest sposobem na zwrócenie wyniku tak, jak robiliśmy to w ASP.net web api 2.

W rdzeniu asp.net (WEB API) po prostu wyglądamy tak.

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

Uwaga: „Jego odpowiedź jest kodowana, ale nie twierdzą, że obraz” Jak można wspomnieć, że w Fiddler ImageView widzisz komunikat podobny do tego ponieważ rdzeń ASP.net traktuje HttpResponseMessage jako prostą klasę i konwertuje na json lub xml.

+0

Cóż, liczy się ostateczny wynik. Twój kod bardzo ładnie. Do cholery z HttpResponseMessage. :-) Zamierzam oznaczyć to jako poprawną odpowiedź. Wielkie dzięki, –

+3

Lepiej jest użyć przeciążenia metody "File", które akceptuje strumień, w ten sposób nie ładujesz obrazu do pamięci serwerów przed wysłaniem. 'Strumień FileStream = File.Open (@" E: \\ Test.jpg "); return File (stream, "image/jpeg"); 'lub jeszcze łatwiej:' return PhysicalFile ("@ E: \\ Test.jpg", "image/jpg"); 'https://github.com/aspnet/ Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.Core/ControllerBase.cs # L711 – Tseng