【问题标题】:ASP.NET Core 3 - Angular SPA PWAASP.NET Core 3 - Angular SPA PWA
【发布时间】:2020-02-12 14:40:33
【问题描述】:

我正在尝试在 ASP.NET Core 3 中创建一个 Angular SPA。所以我开始了一个新项目,使用 Angular 模板并将所有包更新到 Angular 8.2.9 版本。到目前为止一切顺利,获得了通往 Azure 的不错的 CI/CD 管道,网站运行起来就像一个魅力。

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

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

看起来清单文件确实被提取了,但是 mime 类型 (text/html) 有问题。任何建议都欢迎在这里...

【问题讨论】:

    标签: angular asp.net-core progressive-web-apps asp.net-core-3.0


    【解决方案1】:

    找到了! 事实上,ASP.NET Core 为 manifest.webmanifest 文件提供了错误的内容类型是问题所在。要解决这个问题,请移动启动类的配置方法并创建一个新的 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
        });
    }
    

    差不多就是这样……你现在可以开始了!

    【讨论】:

    • github 上还有一个未解决的问题:github.com/aspnet/AspNetCore/issues/2442 但是解决它的 pullrequest 已关闭...:github.com/aspnet/AspNetCore/pull/7664
    • @nikneem 我已经这样做了,并且没有显示任何错误,但是当我从 VS 执行应用程序时,它似乎无法正确地服务于应用程序的 PWA 部分。必须进行哪些配置(除了安装 angular/pwa)?
    • 我相信您不能在本地运行 PWA,因为拥有受信任的 SSL 证书是 PWA 的一项要求。您只能在 test/acc/prod 环境中看到 PWA 功能
    猜你喜欢
    • 2020-11-29
    • 2018-02-15
    • 1970-01-01
    • 2021-10-15
    • 2019-12-05
    • 2018-05-30
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多