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

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

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

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

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

У меня есть следующий код в мой веб.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.NETFrameworkv4.0.30319aspnet_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.NETFramework64v4.0.30319aspnet_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>

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

Я также устал от всех вещей, упомянутых во всех этих вопросах:

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

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

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

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

4 ответов


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

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


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

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

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

  1. откройте IIS и перейдите на соответствующий сайт.
  2. нажмите "сопоставления обработчиков"
  3. найдите обработчик с именем "WebDAV"
  4. выберите его и удалите

Это мой оригинальное сообщение.


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

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

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

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

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

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

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

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

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

Я начал получать эту ошибку после того, как я удалил модуль WebDAV и обработчик вручную из IIS, чтобы получить работу. Мне пришлось удалить роль сервера "WebDAV Publishing", чтобы преодолеть эту ошибку. После удаления этой роли и перезапуска IIS PUT работает нормально.

enter image description here