如何在 .NET Core 中为没有文件扩展名的文件设置 MIME 类型?
Posted
技术标签:
【中文标题】如何在 .NET Core 中为没有文件扩展名的文件设置 MIME 类型?【英文标题】:How can I set the MIME type on a file without a file extension in .NET Core? 【发布时间】:2020-05-19 02:13:54 【问题描述】:我已经获得了一些文件来使用 WebAssembly 模块,这些模块应该设置为作为 application/octet-stream 加载。
我在 Startup.cs 中找到了设置 MIME 类型的文档,并且该文档适用于 WebAssembly 模块本身。
不幸的是,还有其他三个文件应该作为应用程序/八位字节流加载,它们没有文件扩展名,例如file1-shard1
。我已经尝试直接使用通配符来解决它们,但它们仍然在 Firefox 的“网络”选项卡中显示为 Type = html。
请问有谁知道如何正确设置这些文件的 MIME 类型?
// Set up FileExtension Content Provider for Web Assembly
var provider = new FileExtensionContentTypeProvider();
provider.Mappings[".wasm"] = "application/wasm";
// Set up MIME type for shard files
provider.Mappings["file1-shard1"] = "application/octet-stream";
provider.Mappings["*shard1*"] = "application/octet-stream";
provider.Mappings[".*"] = "application/octet-stream";
provider.Mappings["."] = "application/octet-stream";
app.UseStaticFiles(new StaticFileOptions
ContentTypeProvider = provider
);
【问题讨论】:
【参考方案1】:感谢 yaakov 在这方面的领导。除了 DefaultContentType,您还需要告诉应用服务在包含这些文件的文件夹中使用 ServeUnknownFileTypes。
在下面的代码中,app.UseStaticFiles();
是使 wwwroot 文件夹工作的现有代码。这段代码应该添加到 Startup.cs
然后我为 WebAssembly 文件设置映射。然后将其用于包含默认内容类型和 ServeUnknownFileTypes 的特定文件夹的 app.UseStaticFiles() 的新迭代。
这并不完美,因为存在与 ServeUnknownFileTypes 相关的一些安全风险,但在这种情况下,它仅限于单个文件夹。
// Default options for wwwroot
app.UseStaticFiles();
// Set up FileExtension Content Provider for Web Assembly
var provider = new FileExtensionContentTypeProvider();
provider.Mappings[".wasm"] = "application/wasm";
app.UseStaticFiles(new StaticFileOptions
ContentTypeProvider = provider,
ServeUnknownFileTypes = true,
DefaultContentType = "application/octet-stream",
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/WebAssemFiles")),
RequestPath = "/WebAssemFiles"
);
【讨论】:
【参考方案2】:您不能使用 FileExtensionContentTypeProvider
执行此操作,因为如果文件没有扩展名,它会在内部失败。
您需要实现自定义IContentTypeProvider
,或设置StaticFileOptions.DefaultContentType
。
【讨论】:
以上是关于如何在 .NET Core 中为没有文件扩展名的文件设置 MIME 类型?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Asp.net Core的登录过程中为“记住我”设置单个cookie超时?
在 Rider 中为 .NET Core 运行 nUnit 测试
如何在 .NET Core 中为 JWT 令牌设计自定义验证器?