我怎样才能让IIS在我的网站上正确地提供.webmanifest文件?

Dav*_*e L 35 iis web-manifest

网站图标发电机组装包网站管理员,以便使用具有可用于许多不同的设备的图标.该页面附带一个名为的文件,该文件site.manifest通过网页文档中的以下标记链接<head>:

<link rel="manifest" href="site.webmanifest">
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Dav*_*e L 48

默认情况下,IIS不会提供任何没有与之关联的MIME映射的文件.

要解决此问题,您需要在IIS中向.webmanifest添加MIME映射.要完成此任务,请打开IIS.在左侧,在"连接"菜单中选择您的网站或整个服务器.如果选择服务器,则MIME映射将应用于服务器上的每个网站.如果您选择一个网站,它将只适用于一个网站.

接下来,从IIS菜单中选择"MIME类型":

MIME类型菜单项

在那里,单击右侧菜单中的"添加...".在打开的对话框中,在MIME类型框的文件扩展名框"application/manifest + json"中指定".webmanifest".

添加MIME类型对话框

单击"确定",您应该全部设置好!

  • @nathanjw,本主题适用于“.webmanifest”文件。`.manifest` 和 `.webmanifest` 不同。希望这可以帮助。:) (2认同)

Ric*_*ley 31

对于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> 
Run Code Online (Sandbox Code Playgroud)

  • 如果“json”已经是有效的 mime 类型,请删除 json 映射以防止 IIS 上出现错误。换句话说,删除这一行: `&lt;mimeMap fileExtension=".json" mimeType="application/json" /&gt;` (3认同)
  • 谢谢你!这也修复了使用 IIS Express 进行调试的问题。 (2认同)

Ben*_*Ben 23

对于那些使用ASP.NET Core(我使用2.1)的用户,您可以Startup.cs根据静态文件 docs 配置可在应用程序文件中提供的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();
}
Run Code Online (Sandbox Code Playgroud)


Pet*_*err 11

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

 <link rel="manifest" href="site.webmanifest.json">
Run Code Online (Sandbox Code Playgroud)

IIS应该已经具有.json文件的MIME类型如果部署到Azure不太容易更改IIS设置,这也很有用.

  • 我同意将文件重命名为 *.json 最初对我来说最有意义。特别是因为该文件确实是 JSON 数据。但是,在我的问题起源的以下线程中,有一些强烈反对这样做:https://github.com/RealFaviconGenerator/realfavicongenerator/issues/372 (4认同)

小智 6

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

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

app.UseSpaStaticFiles(new StaticFileOptions()
{
    ContentTypeProvider = provider
});
Run Code Online (Sandbox Code Playgroud)