WebDAV и WebAPI вместе вызывают ошибку: обработчик "ExtensionlessUrlHandler-Integrated-4.0" имеет плохой модуль "ManagedPipelineHandler" в своем списке модулей

У меня есть и WebDAV, установленный и запущенный на моем сайте, как виртуальный подсайт, у меня есть сайт MVAP WebAPI, API отлично работает, пока я не попытаюсь отправить ему запрос PUT, после чего я получаю следующую ошибку:/p >

Ошибка HTTP 500.21 - Внутренняя ошибка сервера

Обработчик "ExtensionlessUrlHandler-Integrated-4.0" имеет плохой модуль "ManagedPipelineHandler" в своем списке модулей

Если я отключу WebDAV, тогда все работает нормально, и я не получаю ошибок. Это происходит только в том случае, если включен WebDAV.

У меня есть весь следующий код в моем web.config:

<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>

Я пробовал общаться с различными пулами приложений.

Я также устал от всего, что упоминалось во всех этих вопросах:

Как избавиться от этой ошибки Handler "PageHandlerFactory-Integrated" имеет плохой модуль "ManagedPipelineHandler" в своем списке модулей

Обработчик "ExtensionlessUrlHandler-Integrated-4.0" имеет плохой модуль "ManagedPipelineHandler" в своем списке модулей

Как исправить: Handler "PageHandlerFactory-Integrated" имеет плохой модуль "ManagedPipelineHandler" в своем списке модулей

Ничто из этого не решило мою проблему, есть ли что-нибудь еще, что я не пробовал?

Ответ 1

Мы закончили работу с Microsoft с этим, они просмотрели его в течение нескольких недель, прежде чем возвращаться, говоря, что невозможно запустить WebDAV и WebAPI на том же сайте.

Они попытаются решить эту проблему в будущей версии IIS.

Ответ 2

@jblaske имеет хороший ответ.

Если вы хотите временно удалить его, возможно, эта статья - лучшее решение.

Если вы хотите удалить обработчик все вместе, выполните следующие действия.

  • Откройте IIS и перейдите на сайт, о котором идет речь.
  • Нажмите "Сопоставление обработчиков"
  • Найдите обработчик с именем "WebDAV"
  • Выберите его и удалите

Это мой оригинальный пост.

Ответ 3

У вас может быть проблема с опечатками в объявлении обработчиков. Блог Томаса Марквардта

5.0 Устранение неполадок

Если вы получили ошибку, аналогичную приведенной ниже, раздел, вероятно, недействителен.

Ошибка HTTP 500.21 - Внутренний обработчик ошибок сервера "имеет плохой модуль" ManagedPipelineHandler "в своем списке модулей. Вы, вероятно, имеют сопоставление обработчика, у которого нет правильного предварительного условия. IIS не прощает в отношении опечаток, а предварительные условия деликатный случай. Текст должен быть preCondition =" integratedMode "или Precondition =" classicMode".

Кроме того, еще одно предложение из комментариев по этой статье:

Эндрю Джонсон 25 янв 2011 3:20 утра #:

Я обнаружил, что я также могу получить "Обработчик плохой модуль ManagedPipelineHandler в своем списке модулей", если обработчик имеет не requireAccess = "None". Для меня изменение этого на requireAccess = "Чтение" ошибка сделана.

Этот комментарий может применяться к вашему делу, поскольку я вижу, что в applicationHost.config запись для обработчиков WebDav (обратите внимание на requredAccess="None"):

<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />