Как я могу правильно обслуживать IIS.webmanifest на моем веб-сайте?

Генератор Favicon собирает пакет для использования веб-мастерами, чтобы значки были доступны для многих различных устройств. Страница содержит файл site.manifest который site.manifest следующий тег в документе веб-страницы <head>:

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

Согласно Mozilla: "Манифест веб-приложения предоставляет информацию о приложении (например, имя, автора, значок и описание) в текстовом файле JSON. Целью манифеста является установка веб-приложений на домашний экран устройства, предоставляя пользователи с более быстрым доступом и более богатым опытом. "

К сожалению, если вы используете Microsoft Internet Information Services (IIS), вы получите ошибку 404.3, если попытаетесь получить доступ к файлу site.webmanifest.

Точное сообщение об ошибке выглядит следующим образом: "Запрашиваемая вами страница не может быть обработана из-за конфигурации расширения. Если страница является скриптом, добавьте обработчик. Если файл должен быть загружен, добавьте карту MIME".

Как правильно обслуживать файлы site.webmanifest в IIS?

Ответ 1

По умолчанию IIS не обслуживает файлы, с которыми в его основных настройках (IIS) не связана карта MIME.

Чтобы решить эту проблему, вам необходимо сопоставить .webmanifest файла .webmanifest с соответствующим типом MIME.

Для этого откройте IIS и выполните следующие действия;

  1. В левой части выберите ваш веб-сайт или весь сервер в меню "Подключения". Если вы выберете сервер, ваше сопоставление MIME будет применяться ко всем веб-сайтам на сервере. Если вы выберете веб-сайт, он будет применяться только к одному веб-сайту.

  2. Далее выберите "Типы MIME" из меню IIS:

MIME Types Menu Item

  1. Оказавшись там, нажмите "добавить..." в правом меню.

  2. В открывшемся диалоговом окне укажите .webmanifest в поле расширения имени файла application/manifest+json в поле MIME-типа.

Add MIME Type dialog box

  1. Нажмите "ОК".

Поздравляем; Вы только что определили тип MIME для .webmanifest в IIS.

Ответ 2

Для 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> 

Ответ 3

Для тех, кто использует ASP.NET Core (я использую 2.1), вы можете настроить типы MIME, которые могут обслуживаться в файле Startup.cs приложения согласно статическим файлам документов:

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();
}

Ответ 4

Более простым решением является переименование файла манифеста в site.webmanifest.json и ссылка на него

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

В IIS уже должен быть тип MIME для файлов .json. Это также полезно при развертывании в Azure, где не так просто изменить настройки IIS.

Ответ 5

Добавление к ответу @Ben: если у вас есть SPA, вы должны поместить код StaticFileOptions в вызов UseSpaStaticFiles():

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

app.UseSpaStaticFiles(new StaticFileOptions()
{
    ContentTypeProvider = provider
});