Как лучше всего вернуть изображение с двумя параметрами (x и y для изменения размера).
Например
~/api/image12345/200/200
Вернет 200 на 200 jpg / png / или gif
Должен ли я возвращать System.Drawing.Image
объект или определять вручную HTTPReponseMessage.Content
?
asp.net
asp.net-web-api
image
Макс Александр
источник
источник
Ответы:
Вы не должны возвращать a
System.Drawing.Image
, если вы также не добавите средство форматирования, которое знает, как преобразовать это в соответствующие байты, не сериализует себя как байты изображения, как вы ожидали.Одно из возможных решений - вернуть
HttpResponseMessage
с изображением, сохраненным в его содержимом (как показано ниже). Помните, что если вам нужен URL, который вы указали в вопросе, вам понадобится маршрут, который сопоставляет параметры {imageName}, {width} и {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; } }
Но, опять же, если вы делаете это во многих местах, использование метода форматирования может быть «рекомендуемым» способом. Как и почти все в программировании, ответ будет зависеть от вашего сценария.
источник
GetImage
метод?Изображения тяжелые. ASP.NET WebForms, HttpHandlers, MVC и веб-API - все они выполняют абсолютно ужасную работу по обслуживанию статических файлов. IIS очень хорошо с этим справляется - часто в 20–100 раз эффективнее.
Если вы хотите добиться хорошей производительности, выполните перезапись URL-адреса не позднее, чем во время PostAuthorizeRequest, чтобы IIS мог забрать и обработать файл. Да, это означает обработку событий на уровне HttpModule.
[Отказ от ответственности: я являюсь автором следующей статьи и проекта с открытым исходным кодом]
Если вы делаете что-то динамическое с изображениями, ознакомьтесь с этой статьей о подводных камнях обработки изображений, которых следует избегать , и подумайте о том, чтобы взглянуть на ImageResizer . Он имеет отличное кэширование диска (которое использует статическую обработку файлов IIS) и легко подключается к генерации изображений любого типа. Он также имеет дополнительные привязки для AForge, FreeImage и WIC, если вам нужно продвинуться.
источник