ASP.NET 核心 3 - Angular SPA PWA

ASP.NET Core 3 - Angular SPA PWA

我正在尝试在 ASP.NET Core 3 中创建一个 Angular SPA。所以我开始了一个新项目,使用 Angular 模板并将所有包更新到版本 8.2。 Angular 中的 9 个。到目前为止一切顺利,有一个很好的 CI/CD 到 Azure 的管道,网站 运行 很有魅力。

但是,现在我正在尝试向应用程序添加 PWA 功能。所以我根据 angular (ng add @angular/pwa) 的文档添加了 PWA,一切似乎都很好。 得到了一个不错的 manifest.webmanifest 文件,并且所有预期的更改都按预期应用。但是,当我 运行 事情并开始审核时,使 PWA 可安装的要求失败。

我遇到的错误: - 此页面由 service worker 控制,但未找到 start_url,因为未获取任何清单。 - 失败:未获取任何清单。

看起来清单文件确实已提取,但 MIME 类型有误 (text/html)。欢迎在这里提出任何建议...

找到了! ASP.NET Core 为 manifest.webmanifest 文件提供内容类型错误的事实实际上是问题所在。要解决此问题,请移动启动的配置方法 class 并创建一个新的 FileExtensionContentTypeProvider。然后还为具有 webmanifest 扩展名的文件添加映射,并告诉它将这些文件作为 application/manifest+json 文件提供。

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

然后向下滚动,如果你(像我一样)选择了Angular项目模板,你会发现这段代码:

app.UseStaticFiles();
if (!env.IsDevelopment())
{
    app.UseSpaStaticFiles();
}

现在,对于 UseStaticFiles 和 UseSpaStaticFiles,您需要添加文件扩展名内容类型提供程序,以便为文件提供正确的内容类型,如下所示:

app.UseStaticFiles(new StaticFileOptions
{
    ContentTypeProvider = provider
});
if (!env.IsDevelopment())
{
    app.UseSpaStaticFiles(new StaticFileOptions
    {
        ContentTypeProvider = provider
    });
}

差不多就这些了...您现在可以开始了!