如何让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并执行以下步骤
.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
});