Выходное изображение с помощью web api HttpResponseMessage
Я пытаюсь выполнить следующий код для вывода изображения из asp.net web api, но длина тела ответа всегда равна 0.
public HttpResponseMessage GetImage()
{
HttpResponseMessage response = new HttpResponseMessage();
response.Content = new StreamContent(new FileStream(@"path to image"));
response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
return response;
}
Любые советы?
РАБОТАЕТ:
[HttpGet]
public HttpResponseMessage Resize(string source, int width, int height)
{
HttpResponseMessage httpResponseMessage = new HttpResponseMessage();
// Photo.Resize is a static method to resize the image
Image image = Photo.Resize(Image.FromFile(@"d:\path\" + source), width, height);
MemoryStream memoryStream = new MemoryStream();
image.Save(memoryStream, ImageFormat.Jpeg);
httpResponseMessage.Content = new ByteArrayContent(memoryStream.ToArray());
httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
httpResponseMessage.StatusCode = HttpStatusCode.OK;
return httpResponseMessage;
}
Ответы
Ответ 1
Следующее:
-
Убедитесь, что путь правильный (duh)
-
Убедитесь, что ваша маршрутизация верна. Либо ваш контроллер - ImageController, либо вы определили настраиваемый маршрут для поддержки "GetImage" на каком-то другом контроллере.
(Для этого вы должны получить ответ 404.)
-
Убедитесь, что вы открыли поток:
var stream = new FileStream(path, FileMode.Open);
Я попробовал что-то подобное, и оно работает для меня.
Ответ 2
Вместо ByteArrayContent вы также можете использовать класс StreamContent для более эффективной работы с потоками.