Подтвердить что ты не робот

Выходное изображение с помощью 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;
    }
4b9b3361

Ответ 1

Следующее:

  • Убедитесь, что путь правильный (duh)

  • Убедитесь, что ваша маршрутизация верна. Либо ваш контроллер - ImageController, либо вы определили настраиваемый маршрут для поддержки "GetImage" на каком-то другом контроллере. (Для этого вы должны получить ответ 404.)

  • Убедитесь, что вы открыли поток:

    var stream = new FileStream(path, FileMode.Open);

Я попробовал что-то подобное, и оно работает для меня.

Ответ 2

Вместо ByteArrayContent вы также можете использовать класс StreamContent для более эффективной работы с потоками.