返回带有两个参数(x和y用于调整大小)的图像的最佳方式是什么.

例如

~/api/image12345/200/200

将返回200x200jpg/png/或gif

我应该返回System.Drawing.Image对象还是手动定义HTTPReponseMessage.Content

推荐答案

您不应该返回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相关问答推荐

在Docker Windows中,ASP.NET核心容器在自定义端口8080上运行,但ASP.NET容器在固定端口80上运行

Reaction-Native SignalR连接在调试模式下工作,在释放模式下失败

IISExpress未在ARM64 Mac/.NET 4.8上启动

ASP.NET Core 延迟加载始终返回 null

如何在 asp.net 服务器中使用字体

无法翻译 LINQ

为什么 Web 架构应该是松耦合的?

使用 Owin 身份验证的服务器端声明缓存

ASP.NET MVC4 jquery/javascript 包的使用

使用 ASP.NET WebForms 的 jQuery DataTables 服务器端处理

'Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机上注册.

ASP.Net:在共享/静态函数中使用 System.Web.UI.Control.ResolveUrl()

ASP.NET vNext 与主机无关,这意味着什么?

如何在 IIS 7.5 上使用 ASP.NET 表单身份验证保护静态文件?

如何从 Asp.net Mvc-3 发送邮箱?

在 ASP.NET 4.5 WebForms 中通过 bundle.config 与 BundleConfig.cs Bundle 资源

ASP.NET Core 中的 NuGet 包位置在哪里?

Windows Azure PaaS(网络角色)的真正替代品?

Visual Studio 2013 ASP.NET 项目中 Antlr 包的用途是什么?

如何调试 w3wp clr.dll 错误