91

Favicon Generator组装了一个包供网站管理员使用,以便为许多不同的设备提供可用的图标。该页面带有一个名为的文件,该文件site.manifest通过网页文档中的以下标记链接到<head>

<link rel="manifest" href="site.webmanifest">

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

不幸的是,如果您使用的是 Microsoft 的 Internet 信息服务 (IIS),如果您尝试访问该site.webmanifest文件,则会收到 404.3 错误。

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

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

4

6 回答 6

117

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

为了应对这一挑战,您需要将.webmanifest文件扩展名映射到其适当的 MIME 类型。

为此,请打开 IIS 并按照以下步骤操作;

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

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

MIME 类型菜单项

  1. 在那里,单击右侧菜单中的“添加...”。

  2. 在打开的对话框中,在 MIME 类型框中.webmanifest的文件扩展名框中指定。application/manifest+json

添加 MIME 类型对话框

  1. 单击“确定”。

恭喜;您刚刚.webmanifest在 IIS 上定义了 MIME 类型。

于 2018-03-29T23:26:27.580 回答
71

对于 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> 
于 2018-11-08T14:03:19.310 回答
63

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

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();
}
于 2018-11-12T16:18:46.910 回答
16

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

 <link rel="manifest" href="site.webmanifest.json">

IIS 应该已经有一个 .json 文件的 MIME 类型 如果部署到 Azure 中更改 IIS 设置并不容易,这也很有帮助。

于 2018-10-22T15:42:26.810 回答
9

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

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

app.UseSpaStaticFiles(new StaticFileOptions()
{
    ContentTypeProvider = provider
});
于 2018-12-24T13:36:00.383 回答
0

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

在此处输入图像描述

删除它允许提供文件。

于 2020-04-04T19:37:29.170 回答