asp.net 从控制器提供静态文件

abithluo  于 2023-01-03  发布在  .NET
关注(0)|答案(1)|浏览(140)

我有一个.net 6应用程序,它可以在启动时从不同的zip文件中读取文件,并将它们转换为Resources列表:

public class Resource
{
    public string? Id { get; set; }
    public string? MimeType { get; set; }
    public byte[] Data { get; set; } = Array.Empty<byte>();
}

目前,我只是将它们保存在内存中的字典中,并从控制器提供服务:

[HttpGet("{id}")]
public IActionResult GetResource(string id)
{
    var resource = _resourceRepository.Get(id);

    return File(resource.Data, resource.MimeType!);
}

我想在net框架中加入静态文件管理,但最好保留控制器,以便客户端可以使用GET resource/id获得资源。
我尝试使用app.UseStaticFiles,将RequestPath设置为“resource”,存储没有扩展名的文件,并设置ServeUnknownFileTypes = true,这样可以工作,我更喜欢保留扩展名,以便能够手动浏览文件夹并保留内容类型标题。
有没有办法通过控制器来管理这个?

yhuiod9q

yhuiod9q1#

我想您已经知道配置静态文件中间件是必要的,
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-7.0
但是您可能没有注意到,您可以编写自己的文件提供程序(而不是默认的PhysicalFileProvider),
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/file-providers?view=aspnetcore-7.0
微软发布了一个ManifestEmbeddedFileProvider的例子,但它可能不会以你喜欢的方式工作,所以你最好创建自己的。

相关问题