如何让IIS在我的网站上正确服务.webmanifest文件?

如何让IIS在我的网站上正确服务.webmanifest文件?,iis,web-manifest,Iis,Web Manifest,为使图标可用于许多不同的设备,将组装一个供网站管理员使用的软件包。该页面附带一个名为site.manifest的文件,该文件通过网页文档中的以下标记链接到: 根据:“web应用程序清单在JSON文本文件中提供有关应用程序的信息(如名称、作者、图标和描述)。清单的目的是将web应用程序安装到设备的主屏幕上,为用户提供更快的访问和更丰富的体验。” 不幸的是,如果您使用的是Microsoft的Internet信息服务(IIS),那么如果您尝试访问站点.webmanifest文件,就会出现404.3

为使图标可用于许多不同的设备,将组装一个供网站管理员使用的软件包。该页面附带一个名为
site.manifest
的文件,该文件通过网页文档中的以下标记链接到


根据:“web应用程序清单在JSON文本文件中提供有关应用程序的信息(如名称、作者、图标和描述)。清单的目的是将web应用程序安装到设备的主屏幕上,为用户提供更快的访问和更丰富的体验。”

不幸的是,如果您使用的是Microsoft的Internet信息服务(IIS),那么如果您尝试访问
站点.webmanifest
文件,就会出现404.3错误

确切的错误消息如下:“由于扩展配置,无法为您请求的页面提供服务。如果页面是脚本,请添加处理程序。如果应该下载文件,请添加MIME映射。”


如何在IIS中正确提供
站点.webmanifest
文件?

默认情况下,IIS不提供任何在其(IIS)核心设置中没有与之关联的MIME映射的文件

要解决此问题,您需要将
.webmanifest
文件扩展名映射到相应的MIME类型

要完成此操作,请打开IIS并执行以下步骤

  • 在左侧,在“连接”菜单中选择您的网站或整个服务器。 如果选择服务器,MIME映射将应用于服务器上的每个网站。 如果选择一个网站,它将仅应用于单个网站

  • 接下来,从IIS菜单中选择“MIME类型”:

  • 到达后,单击右侧菜单中的“添加…”

  • 在打开的对话框中,在MIME类型框的文件扩展名框中指定
    .webmanifest

  • 单击“确定”

  • 祝贺你;您刚刚为IIS上的
    .webmanifest
    定义了MIME类型。

    更简单的解决方案是将清单文件重命名为site.webmanifest.json并链接为

     <link rel="manifest" href="site.webmanifest.json">
    
    
    
    IIS应该已经具有.json文件的MIME类型
    如果部署到Azure,更改IIS设置并不容易,这也很有帮助。

    对于Azure,我将其添加为web.config

    <?xml version="1.0"?>
    
    <configuration>
        <system.webServer>
            <staticContent>
                <mimeMap fileExtension=".json" mimeType="application/json" />
                <mimeMap fileExtension=".webmanifest" mimeType="application/manifest+json" />
            </staticContent>
        </system.webServer>
    </configuration> 
    

    对于那些使用ASP.NET Core(我使用的是2.1)的用户,您可以根据以下文档配置可以在应用程序
    Startup.cs
    文件中提供的MIME类型:

    添加到@Ben的:如果您有SPA,则应将StaticFileOptions代码放入UseSpacStaticFiles()调用中:


    我发现IIS服务器在请求过滤功能中列出了“.json”,表示它是不允许的


    删除它可以提供文件。

    我同意最初将文件重命名为*.json对我来说最有意义。尤其是因为文件实际上是JSON数据。然而,在我的问题产生的以下线程中,有一些强烈的反对意见:根据当前的W3C工作草案,这些文件必须命名为.webmanifest。是的,目前浏览器正在使用.json,但他们可以根据规范一时兴起地更改它,然后它会破坏您的PWA。。。。关于
    .webmanifest
    文件扩展名的更多详细信息我这样做了,它破坏了该服务器上所有站点上的所有
    .js
    文件(出于某种原因,服务器开始将它们作为
    html
    而不是
    text/javascript
    )。为什么会发生这种情况?在删除IIS中的
    .webmanifest
    mime类型后,站点恢复正常。有趣的是,我按照解释添加了它,但它很快就消失了,我又得到了一个403,再次添加,工作了一段时间,然后又消失了,等等。我为碰撞道歉,但我已经定义了。默认情况下,我假设,清单已定义,作为
    应用程序/x-ms/manifest
    。我可以改变这个定义吗?请注意,如果我确实更改了它,它仍然会给出由发布的错误OP@nathanjw,此主题用于
    .webmanifest
    文件
    .manifest
    .webmanifest
    不一样。希望这有帮助。:)非常感谢。这也修复了使用IIS Express进行调试的问题。这是一个更好的答案,因为我没有权限在服务器上设置mime类型。非常感谢,我为此沉思了两天多。在这之后,对于我的两个问题:脱机缓存和安装web应用程序功能,它都非常顺利。如果
    json
    已经是有效的mime类型,请删除json映射以防止在IIS上出错。换句话说,删除这一行:
    +1这也适用于Kestrel,即在IIS上不运行project,而是在
    launchSetting.json
    中使用本地配置文件时,如果您已经通过app.UseStaticFiles()使用静态文件,请确保同时调用UseStaticFiles()和UseStaticFiles(new StaticFileOptions()…)否则,您的所有其他文件将停止服务。请注意,需要手动将其添加到.NET core 3.1。在.NET Core 5.0中,它已包含在默认提供程序映射中,尝试手动添加它将导致异常,因为它已经存在。
    <?xml version="1.0"?>
    
    <configuration>
        <system.webServer>
            <staticContent>
                <mimeMap fileExtension=".json" mimeType="application/json" />
                <mimeMap fileExtension=".webmanifest" mimeType="application/manifest+json" />
            </staticContent>
        </system.webServer>
    </configuration> 
    
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        FileExtensionContentTypeProvider provider = new FileExtensionContentTypeProvider();
        provider.Mappings[".webmanifest"] = "application/manifest+json";
    
        app.UseStaticFiles(new StaticFileOptions()
        {
            ContentTypeProvider = provider
        });
    
        app.UseMvc();
    }
    
    FileExtensionContentTypeProvider provider = new FileExtensionContentTypeProvider();
    provider.Mappings[".webmanifest"] = "application/manifest+json";
    
    app.UseSpaStaticFiles(new StaticFileOptions()
    {
        ContentTypeProvider = provider
    });