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