从 Azure Web 应用程序 (Linux) 提供 Angular PWA 因缺少 .webmanifest 而失败

Serving Angular PWA from Azure Web App (Linux) fails on missing .webmanifest

关于同一问题的 questions 数量,但这些解决方案特定于 IIS:我们在 Azure Web App Linux 实例中托管并使用 Kestrel (ASP.Net Core 3.1) 作为网络服务器。

设置 Angular PWA 并部署新版本后,Angular 客户端抛出以下消息;

manifest.webmanifest:1 Manifest: Line: 1, column: 1, Syntax error.

通常在无法加载 manifest.webmanifest 时显示此错误(我正在测试的当前版本是 Angular PWA 安装的默认文件,因此其内容不太可能是问题所在).此外,当我在 Chrome 开发人员工具中查看文件时,它会显示我的 index.html.

的内容

按照 IIS 的说明,我试图了解如何使用 Kestrel 提供文件。 建议如下(我也试过 application/json):

FileExtensionContentTypeProvider provider = new FileExtensionContentTypeProvider();
provider.Mappings[".webmanifest"] = "application/manifest+json";

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

我们如何从 Azure Web 服务 (Linux) 提供 Angular PWA?

在与 Ben 的回答相同的话题中,有一个 略有不同,但我没有发现其中的区别。

正确的配置是使用 UseSpaStaticFiles,因为清单是从 Angular 静态文件夹而不是 ASP.Net 静态文件夹提供的。

适合我的配置:

FileExtensionContentTypeProvider provider = new FileExtensionContentTypeProvider();
provider.Mappings[".webmanifest"] = "application/json";

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

我还注意到 Henric Rosvall 的评论:

In .NET Core 5.0 it has been included in the default provider mappings, and trying to add it manually will cause exceptions since it's already there.