Max*_*der 82 asp.net image asp.net-web-api
返回带有2个参数的图像的最佳方法是什么(x和y用于调整大小).
例如
~/api/image12345/200/200
Run Code Online (Sandbox Code Playgroud)
将返回200乘以200 jpg/png /或gif
我应该返回一个System.Drawing.Image
对象还是手动定义HTTPReponseMessage.Content
?
car*_*ira 139
你不应该返回一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
但同样,如果你在许多地方这样做,那么格式化路线可能是"推荐"的方式.作为编程中的几乎所有内容,答案将取决于您的场景.
Lil*_*ver 19
图像很重.ASP.NET WebForms,HttpHandlers,MVC和Web API 在提供静态文件方面都做得非常糟糕.IIS做得非常好 - 通常效率提高20-100倍.
如果您希望获得良好的性能,请在PostAuthorizeRequest期间最迟进行URL重写,以便IIS可以选择并提供该文件.是的,这意味着HttpModule级事件处理.
[免责声明:我是以下文章和开源项目的作者]
如果你正在用图像做一些动态的东西,请查看这篇关于图像处理陷阱的文章以避免,并考虑看一下ImageResizer.它具有出色的磁盘缓存(使用IIS静态文件处理),并且易于连接到任何类型的图像生成.它还具有AForge,FreeImage和WIC的可选绑定,如果你需要先进的话.
归档时间: |
|
查看次数: |
58970 次 |
最近记录: |