Nie powinieneś zwracać a System.Drawing.Image
, chyba że dodasz również program formatujący, który wie, jak przekonwertować to na odpowiednie bajty, nie serializuje się jako bajty obrazu, jak można się spodziewać.
Jednym z możliwych rozwiązań jest zwrócenie pliku HttpResponseMessage
z obrazem przechowywanym w jego treści (jak pokazano poniżej). Pamiętaj, że jeśli potrzebujesz adresu URL, który pokazałeś w pytaniu, potrzebujesz trasy, która odwzorowuje parametry {imageName}, {width} i {height}.
public HttpResponseMessage Get(string imageName, int width, int height)
{
Image img = GetImage(imageName, width, height);
using(MemoryStream ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new ByteArrayContent(ms.ToArray());
result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");
return result;
}
}
Ale znowu, jeśli robisz to w wielu miejscach, skorzystanie z trasy formatera może być sposobem „zalecanym”. Jak prawie wszystko w programowaniu, odpowiedź będzie zależeć od twojego scenariusza.