Есть ли рекомендуемый способ вернуть изображение с помощью ASP.NET Web API
каков наилучший способ вернуть изображение с 2 параметрами (x и y для изменения размера).
~/api/image12345/200/200
вернет 200 на 200 jpg / png / или gif
должен ли я вернуть a System.Drawing.Image объект или вручную определить HTTPReponseMessage.Content?
2 ответов:
вы не должны возвращать 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; } }но опять же, если вы делаете это во многих местах, идя по маршруту форматирования может быть "рекомендуемым" способом. Как и почти все в программировании, ответ будет зависеть от вашего сценария.
картинки тяжелые. ASP.NET WebForms, HttpHandlers, MVC и Web API все делают абсолютно Грозный работа по обслуживанию статических файлов. IIS делает очень хорошая работа этого-часто 20-100x более эффективно.
Если вы хотите получить хорошую производительность, сделайте перезапись URL не позднее во время PostAuthorizeRequest, поэтому IIS может забрать и обслуживать файл. Да, это означает обработку событий на уровне HttpModule.
[отказ от ответственности: я автор следующей статьи и проекта с открытым исходным кодом]
Если вы делаете что-то динамическое с изображениями, проверьте из этой статьи по обработке изображений подводные камни, чтобы избежать, и подумайте о том, чтобы взглянуть на ImageResizer. Он имеет отличное кэширование диска (которое использует статическую обработку файлов IIS) и легко подключается к генерации изображений любого типа. Он также имеет дополнительные привязки для AForge, FreeImage и WIC, если вам нужно продвинуться.
Comments