我正在尝试编写一些中间件来通过代理服务 Azure Blob。正在调用处理程序,正在检索 blob,但未显示我的图像。
我编写了一个服务来连接到存储帐户并创建一个 Blob 客户端。我编写了使用服务的中间件,然后下载请求的 blob 并将其写入响应。通常,我希望将 blob 作为字节数组或流下载并将其写入 OutputStream,这似乎不是在 .net 核心中使用新的 httpContext 的选项。
我的中间件:
namespace SampleApp1.WebApp.Middleware
{
public class BlobFileViewHandler
{
public BlobFileViewHandler(RequestDelegate next)
{
}
public async Task Invoke(HttpContext httpContext, IBlobService svc)
{
string container = httpContext.Request.Query["container"];
string itemPath = httpContext.Request.Query["path"];
Blob cbb = await svc.GetBlobAsync(container, itemPath);
httpContext.Response.ContentType = cbb.ContentType;
await httpContext.Response.Body.WriteAsync(cbb.Contents, 0, cbb.Contents.Length);
}
}
// Extension method used to add the middleware to the HTTP request pipeline.
public static class BlobFileViewHandlerExtensions
{
public static IApplicationBuilder UseBlobFileViewHandler(this IApplicationBuilder builder)
{
return builder.UseMiddleware<BlobFileViewHandler>();
}
}
}
我在 Startup 中使用 Map 函数调用中间件,如下所示:
app.Map(new PathString("/thumbs"), a => a.UseBlobFileHandler());
最后,我尝试在测试页面上使用该处理程序,如下所示:
<img src="~/thumbs?qs=1" alt="thumbtest" />
当我调试时,我可以看到所有正确的部分都被击中,但图像永远不会加载,我只得到以下信息:
我觉得我错过了一些简单的东西,但我不确定那是什么。我正在使用 NetCoreApp 1.1 版。