.net core ImageSharp如何使用Asp.NETMVC控制器

.net core ImageSharp如何使用Asp.NETMVC控制器,.net-core,imagesharp,.net Core,Imagesharp,ImageSharp如何处理从数据库加载的动态图像? 这里是获取图像文件的控制器: public async Task<FileResult> GetPhoto([FromQuery] GetFileAttachementInputAsync input) { var file = await filesAttachementAppService .GetFileAsync(new GetFileAttachementInputAsyn

ImageSharp如何处理从数据库加载的动态图像? 这里是获取图像文件的控制器:

public async Task<FileResult> GetPhoto([FromQuery] GetFileAttachementInputAsync input)
    {
        var file = await filesAttachementAppService
            .GetFileAsync(new GetFileAttachementInputAsync() { FileId = input.FileId })
            .ConfigureAwait(false);
        return file != null 
            ? File(new MemoryStream(file.FileDto.FileContent), file.FileDto.ContentType, file.FileDto.FileName) 
            : null;
    }
我在这里错过了什么让这一切顺利


您没有使用中间件,也没有使用向中间件提供映像的服务

为了让中间件工作,它需要能够捕获映像请求。在默认安装中,这是通过将请求与wwwroot中物理文件系统中的映像源相匹配来完成的

在您的代码中,虽然您已经创建了一个独立的操作结果,返回一个包含您的映像的流,但中间件没有意识到

免责声明,以下内容基于最新的开发者版本1.0.0-dev000131,虽然不太可能更改,但在最终发布之前可能会更改

为了从自定义源提供图像,您需要创建自己的实现,并且可以使用源中的示例作为实现的基础

一旦实现,您将需要通过依赖项注入来注册实现。这需要使用更细粒度的注册,因为您不再使用默认值

//细粒度控件添加默认选项并配置所有其他服务。需要设置所有服务。
services.AddImageSharpCore()
.SetRequestParser()
.SetBufferManager()
.SetMemoryLocatorFromMiddleWareOptions()
.SetCacheHash()文件
.AddProvider()
///通过AddProvider()在此处添加您的提供程序。
.AddProvider()
.AddProcessor()
.AddProcessor()
.AddProcessor();
然后,您应该能够完全删除操作结果,并使用
IImageProvider
IImageResolver
组合来识别请求并返回图像

<img src="/PropertyAdministration/GetPhoto?FileId=@item.MainPhotoId&width=554&height=360" alt="" />
 public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        services.AddImageSharp();
    }
public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILoggerFactory loggerFactory)
    {            
        app.UseImageSharp();
    }