ExtensionlessUrlHandler вызывает 404 Not Found с документом по умолчанию на IIS

Недавно я обновил некоторые пакеты ASP.NET Nuget и изменил index.html файл моего веб-сайта. Теперь я получаю 404-Not Found ошибку, но ТОЛЬКО для корневого пути, то есть когда адрес веб-сайта вводится без подкаталога или имени файла.

Если я явно добавлю "/index.html", то документ по умолчанию будет отображаться правильно.

Я также заметил, что строка ниже в моем файле web.config имеет непредвиденное поведение: если я удаляю строку, то может отображаться корневой путь, но запросы Web API возвращают ответ 404-Not Found. Если я сохраню это, тогда запросы Web API работают, но документ по умолчанию вызывает 404-Not Found.

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

Полный раздел "обработчики" файла web.config выглядит следующим образом:

<handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="OPTIONSVerbHandler" />
    <remove name="TRACEVerbHandler" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

Я не вносил изменений в настройки документа по умолчанию или права доступа к файлу физического пути. Как я могу это исправить?

1 ответ

Я только что обнаружил, что проблема не имеет ничего общего с моей модификацией в index.html. Фактическая причина возникла из-за того, как работает маршрутизация MVC: я только что добавил компоненты MVC в свой проект, а недавно добавленная конфигурация маршрута MVC начала переваривать все пути без расширений. Согласно этому объяснению, я просто добавил исключение для корневого пути (пустая строка), и проблема была исправлена:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapMvcAttributeRoutes();
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("");

        ...
    }
}
Другие вопросы по тегам