【发布时间】:2018-07-24 02:36:17
【问题描述】:
我一直在试图弄清楚如何从 API 返回图像。我看到了最接近的this answer,但我认为它使用了我没有使用的核心。我想出的最好的是
// GET: api/Documents/GetImage/ZJvNmUw991B-KOFj4rAf6ApkYOYuxfgZptZcQlk_k7nK0ZNFr7FGpfLdZZOYcLmXBAuYHWImnV8gCIezYfb9Rw2
[ActionName("GetImage")]
[ResponseType(typeof(Byte[]))]
[HttpGet]
public IHttpActionResult GetImage(string parameter)
{
Bitmap icon = new Bitmap(500, 100);
Graphics g = Graphics.FromImage(icon);
RectangleF rectf = new RectangleF(70, 90, 90, 50);
g.DrawString("Hello World!", new Font("Tahoma", 8), Brushes.Black, rectf);
g.Flush();
using (MemoryStream memStream = new MemoryStream())
{
icon.Save(memStream, ImageFormat.Bmp);
return Ok(memStream.ToArray());
}
}
它确实返回数据,但作为字节数组。如何告诉 Ok Action 结果以“image/bmp”的内容类型发回?
在 api 测试工具中,我可以将请求发送到 http://localhost:58173/api/Documents/GetImage/2,然后我得到 [200 OK] 的响应,其响应内容为“Qk12DQMAAAAAAADYAAAAAOAAAA9AEAAGQAAAA...”,这显然只是位图的字节数组表示。当我在这样的 html 中使用它时
<img src="http://localhost:58173/api/Documents/GetImage/2" />
无法显示图像。我认为它不会将该字节流识别为图像......因为它从未返回内容类型?
我做错了什么?
【问题讨论】:
-
@RalfBönning - 我看过那个,但我一直蹲着。刚刚发现我没有得到图像的原因是因为在将内存流用于响应之前我没有将内存流重置为零位置。
标签: c# image api return-type