我如何使用 WebApplication MapGet 处理程序将图像作为 HTTP 响应发送?

How can I, using a WebApplication MapGet handler, send an image as an HTTP response?

这是我的示例命令行应用程序。我正在使用 Windows 10 和 dot-net 6。

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using System.IO;
var app = WebApplication.Builder();
app.MapGet("/", MyGet);
byte[] MyGet(HttpContext context)
{
   context.Response.ContentType="image/png";
   return File.ReadAllBytes("MyImage.png");
}
app.Run();

当我 运行 这并浏览到服务器时,而不是 PNG 图像 returned,我得到 JSON/Base64 格式的字节。

为 MyGet 使用字符串 return 类型可以愉快地向客户端发送纯文本或 HTML。我怎样才能发送任意字节呢?

如果您想将图像作为文件下载发送:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", MyGet);
async Task MyGet(HttpContext context)
{
   context.Response.ContentType="image/png";
   context.Response.Headers.Add("content-disposition", $"attachment; filename=test");
   await context.Response.Body.WriteAsync(File.ReadAllBytes("MyImage.png"));
   //await context.Response.SendFileAsync(new FileInfo("MyImage.png").FullName);
}
app.Run();
context.Response.Body.WriteAsync(someBytes);

(感谢用户 rawel 向我指出了这个方向。我在发布问题之前尝试过 Response.Body.Write 但这没有用,错误抱怨不允许同步写入。在我的例子中,发送响应是我的 get 函数做的最后一件事,所以保持异步操作打开没有问题。)