Qual é a melhor maneira de retornar uma imagem com 2 parâmetros (xey para redimensionar).
Por exemplo
~/api/image12345/200/200
Retornará 200 por 200 jpg / png / ou gif
Devo retornar um System.Drawing.Image
objeto ou definir manualmente o HTTPReponseMessage.Content
?
asp.net
asp.net-web-api
image
Max Alexander
fonte
fonte
Respostas:
Você não deve retornar um
System.Drawing.Image
, a menos que também adicione um formatador que saiba como convertê-lo nos bytes apropriados não se serialize como os bytes da imagem como você esperaria.Uma possível solução é retornar um
HttpResponseMessage
com a imagem armazenada em seu conteúdo (conforme mostrado abaixo). Lembre-se de que, se você deseja o URL mostrado na pergunta, precisa de uma rota que mapeie os parâmetros {imageName}, {width} e {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; } }
Mas, novamente, se você estiver fazendo isso em muitos lugares, seguir o caminho do formatador pode ser o caminho "recomendado". Como quase tudo na programação, a resposta dependerá do seu cenário.
fonte
GetImage
método?As imagens são pesadas. ASP.NET WebForms, HttpHandlers, MVC e Web API fazem um trabalho absolutamente terrível de servir arquivos estáticos. O IIS faz um trabalho extremamente bom nisso - geralmente de 20 a 100 vezes mais eficiente.
Se você deseja obter um bom desempenho, faça a regravação da URL o mais tardar durante PostAuthorizeRequest, para que o IIS possa selecionar e servir o arquivo. Sim, isso significa manipulação de eventos no nível do HttpModule.
[Aviso: sou o autor do seguinte artigo e projeto de código aberto]
Se você estiver fazendo algo dinâmico com imagens, verifique este artigo sobre as armadilhas do processamento de imagens a serem evitadas e considere dar uma olhada em ImageResizer . Possui excelente cache de disco (que usa manipulação de arquivos estáticos IIS) e é fácil de conectar para geração de imagens de qualquer tipo. Ele tem ligações opcionais para AForge, FreeImage e WIC também, se você precisar avançar.
fonte