iis Blazor服务器应用程序无法下载.msg文件

ctehm74n  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(164)

我有一个Blazor Server 6.0应用程序,其中有下载.msg文件的链接。
我已设置IIS为MIME类型提供服务,尝试应用程序/octet-stream和应用程序/vnd.ms-outlook(并重新启动IIS)
我也试着在web.config中加入staticcontent标记,就像这里建议的那样:.msg file gives download error
显然,在我的program.cs中,我有app.useStaticFiles();
我尝试将.msg放在非blazor应用程序中,它们工作正常,因此我认为与IIS无关
那么,为什么我不能下载(或在Outlook中自动打开)这种类型的文件,而其他(docx,pdf,zip等)都可以?

alen0pnh

alen0pnh1#

ASP.NET Core --在服务器端--还需要知道它必须服务的文件。您可以启用服务所有未知的文件类型(我宁愿不包括相关代码,因为这是一个主要的安全风险),或者您可以添加自己的附加Map,如下所示:

var provider = new FileExtensionContentTypeProvider();
provider.Mappings[".msg"] = "application/vnd.ms-outlook";

// app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions()
{
    ContentTypeProvider = provider
});

更多信息请参见官方文档:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-7.0#fileextensioncontenttypeprovider
此外,Blazor Server还注册了用于提供静态文件的自定义选项(比如.server.js,它与.js不同)。它没有直接公开为公共API来配置,但是您可以查看这里的源代码,了解AddServerSideBlazor扩展方法的实际功能。这里的解决方案依赖于您调用UseStaticFiles,而不显式指定选项,以便它可以从DI检索StaticFilesOptions示例。
掌握了这些知识后,您可以覆盖已配置的选项示例,如下所示:

builder.Services.PostConfigure<StaticFileOptions>(o =>
{
    ((FileExtensionContentTypeProvider)o.ContentTypeProvider).Mappings[".msg"] = "application/vnd.ms-outlook";
});

这将配置DI中注册的已初始化选项示例(在其上发生所有其他配置之后,因此PostConfigure)。
请注意,如果您出于任何原因决定使用不同的IContentTypeProvider,则也需要修改上面的不安全类型转换。

相关问题