«Метод 405 не разрешен» в IIS7.5 для метода «PUT» - PullRequest
98 голосов
/ 27 мая 2011

Я использую WebClient тип для загрузки * .cab файлов на мой сервер.На стороне сервера я зарегистрировал обработчик HTTP для файла * .cab с методом PUT, как показано ниже:

 <add name="ResultHandler" path="*.cab" verb="PUT" type="FileUploadApplication.ResultHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />

Но я всегда получаю ошибку «405 метод не разрешен».В ответе говорится, что допустимые методы следующие:

Headers = {Allow: GET, HEAD, OPTIONS, TRACE
Content-Length: 1293
Content-Type: text/html
Date: Fri, 27 May 2011 02:08:18 GMT
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET}

Даже если я явно разрешу метод PUT в фильтрации запросов IIS для моего веб-приложения, такая же ошибка по-прежнему возникает.подозреваю, что это проблема, связанная с IIS.Я надеюсь, что кто-то может пролить свет на это для меня.

Ответы [ 18 ]

175 голосов
/ 20 февраля 2013

Часто эта ошибка вызвана модулем WebDAV, который пытается обрабатывать такого рода запросы.Простое решение - удалить его из модулей и из обработчиков раздела system.webServer внутри вашего файла web.config.Вот пример конфигурации:

<system.webServer>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
    <handlers>
        <remove name="WebDAV" />
    </handlers>
</system.webServer>
42 голосов
/ 03 июня 2011

Я включил трассировку Failed Request и получил следующую информацию:

 <EventData>
  <Data Name="ContextId">{00000000-0000-0000-0F00-0080000000FA}</Data>
  <Data Name="ModuleName">WebDAVModule</Data>
  <Data Name="Notification">16</Data>
  <Data Name="HttpStatus">405</Data>
  <Data Name="HttpReason">Method Not Allowed</Data>
  <Data Name="HttpSubStatus">0</Data>
  <Data Name="ErrorCode">0</Data>
  <Data Name="ConfigExceptionInfo"></Data>
 </EventData>

Итак, я удалил WebDAVModule из своего IIS, теперь все в порядке ~

Функция трассировки IIS очень полезна.

20 голосов
/ 28 августа 2012

У меня была эта проблема с WebDAV при размещении проекта MVC4 WebApi. Я обошел это, добавив эту строку в web.config:

<handlers>
  <remove name="WebDAV" />
  <add name="WebDAV" path="*" verb="*" modules="WebDAVModule"
      resourceType="Unspecified" requireAccess="None" />
</handlers>

Как объяснено здесь: http://evolutionarydeveloper.blogspot.co.uk/2012/07/method-not-allowed-405-on-iis7-website.html

18 голосов
/ 23 сентября 2015

Взято с здесь , и у меня это сработало:

1. Перейдите в диспетчер IIS.

2.Нажмите на ваше приложение.

3. Перейдите к «сопоставлениям обработчиков».

4.В списке функций дважды щелкните «WebDAV».

5.Нажмите «Ограничения запроса».

6.В закладке «Глаголы» выберите «Все глаголы».

7.Нажмите ОК.

17 голосов
/ 27 июня 2013

Удаление WebDAV-модуля должно быть достаточным.Просто измените ваш Web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule" />
15 голосов
/ 02 апреля 2015

Я попробовал большинство ответов, и, к сожалению, ни один из них не сработал.

Вот что сработало для меня. Есть 3 вещи, которые нужно сделать с сайтом, для которого вы хотите PUT (выберите сайт):

  1. Откройте WebDav Authoring Rules, а затем выберите Disable WebDAV параметр на правой панели.

  2. Выберите Modules, найдите WebDAV Module и удалите его.

  3. Выберите HandlerMapping, найдите WebDAVHandler и удалите его.

Перезагрузите IIS.

9 голосов
/ 13 мая 2017

Лучше всего просто удалить неиспользуемую функцию WebDAV. Перейдите к Программы и компоненты => Включение или отключение функций Windows и отключение Публикация WebDAV в

Информационные службы Интернета => Службы всемирной паутины => Общие функции HTTP

enter image description here

4 голосов
/ 11 декабря 2013

По какой-либо причине, пометка WebDAVModule как «удалить» в моем web.config была недостаточной, чтобы решить проблему в моем случае.

Я нашел другой подход, который действительно решил проблему. Если вы в одной лодке, попробуйте это:

  1. В диспетчере IIS выберите приложение, которое должно поддерживать PUT.
  2. В представлении функций найдите Правила разработки WebDAV . Дважды щелкните его или выберите Открыть элемент из контекстного меню (щелкните правой кнопкой мыши).
  3. На панели действий найдите и нажмите Настройки WebDAV ... .
  4. В настройках WebDAV найдите Поведение фильтрации запросов , и под ним найдите Разрешить фильтрацию глаголов . Установите Разрешить фильтрацию глаголов в Ложь .
  5. На панели действий нажмите Применить .

Это предотвращает отклонение WebDAV глаголов, которые он не поддерживает, и, таким образом, позволяет PUT проходить через обработчик RESTful без изменений.

3 голосов
/ 27 июля 2013

У меня были те же проблемы с PUT, PATCH и DELETE, но не было ничего с установленным WebDav. Решение 1 в этой статье наконец помогло мне: http://support.microsoft.com/kb/942051

2 голосов
/ 04 июля 2018

Другим важным модулем, который необходимо перенастроить перед началом работы PUT и DELETE, является глагол параметров

<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="OPTIONSVerbHandler" />
<remove name="WebDAV" />
<add name="OPTIONSVerbHandler" path="*" verb="*" modules="ProtocolSupportModule" resourceType="Unspecified" requireAccess="Script" />
</handlers>

Также смотрите этот пост: https://stackoverflow.com/a/22018750/9376681

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...