"Метод 405 не разрешен" в IIS7.5 для метода "PUT"

Я использую тип 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 Request Filtering для моего веб-приложения, такая же ошибка все еще происходит.

Я подозреваю, что это проблема, связанная с IIS. Я надеюсь, что кто-то может пролить свет на это для меня.

Ответ 1

Я включил отслеживание неудачных запросов и получил следующую информацию:

 <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 очень полезна.

Ответ 2

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

<system.webServer>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
    <handlers>
        <remove name="WebDAV" />
    </handlers>
</system.webServer>

Ответ 3

У меня была эта проблема с 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

Ответ 4

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

1.Пойдите к диспетчеру IIS.

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

3. Перейдите к "Отображения обработчика".

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

5.Нажмите "Запросить ограничения".

6. На вкладке "Глаголы" выберите "Все глаголы".

7. Нажмите OK.

Ответ 5

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

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule" />

Ответ 6

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

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

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

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

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

Перезапустите IIS.

Ответ 7

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

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

enter image description here

Ответ 8

По какой-то причине маркировка WebDAVModule как "remove" в моем web.config была недостаточной для устранения проблемы в моем случае.

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

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

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

Ответ 9

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

Ответ 10

Для меня эта ошибка не исчезнет и позволит PUT-методы, независимо от того, что я сделал.. удалил webdav, поместил конфигурацию в web.config, чтобы удалить webdav из обработчиков и модулей и настроить PUT как разрешенный глагол по запросу фильтры на iis.. и обеспечить сопоставление обработчиков iis с запросом, настроенным PUT.

Моя проблема в конечном итоге возникла из-за плохой установки ASP.NET 4.5 Extensions. Удалено все, что связано с asp.net с ролями и функциями сервера. перезапущен. прочитал роли и перезапустил их. все работало с приведенной выше конфигурацией.

--- Ниже будет принято PUT, но отправит его неверному обработчику. --ignore ниже

наконец, добавление глагола PUT в качестве разрешенного глагола для отображения обработчика TRACE на iis сработало.. так как я включил неудачную трассировку ошибок, и этот глагол не разрешал глагол.

В прошлый раз у меня была такая же проблема на другом сервере IIS, это произошло из-за отсутствия "/" в конце URL-адреса, поскольку он использовал обработчик по умолчанию, не используя, по-видимому, документ по умолчанию, и теперь я понимаю, что.. поэтому проверьте сопоставления обработчика IIS, если ничего не помогает.

Ответ 11

У меня была эта проблема, но ничего не связано с WebDAV. В моем случае клиент отправлял POST на www.myServer.com/api/chart. Этот вызов должен обрабатываться с помощью "ExtensionlessUrlHanlder-Integrated-4.0", однако, как-то локальная файловая структура была создана в моем каталоге серверов "...\Server\api\chart \". Это означало, что вместо этого был обработан обработчик "StaticFile". Удаление этих локальных файлов окончательно решило проблему.

Ответ 12

Еще один совет от меня. Я использовал PHP + IIS, и в отображениях обработчиков для PHP не было глагола PUT.

Перейдите в IIS Manager-> Ваш site-> Обработчик Mappings-> PHPxx_via_FastCGI-> Запрос Restrictions-> Глаголы, затем добавьте PUT.

Это!

Ответ 13

Для Windows Server 2012 → Перейти к диспетчеру сервера → Удалить роли и компоненты → Роли сервера → Веб-сервер (IIS) → Веб-сервер → Общие функции HTTP → Снять флажок Публикация в WebDAV и удалить его → Перезагрузить сервер.

Ответ 14

Если пул приложений IIS запущен в классическом режиме, убедитесь, что в вашем web.config есть

<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />

    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" modules="IsapiModule" scriptProcessor="c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />

Ответ 15

В моем случае я переместил Web Deploy на другой порт, который также был портом IIS (не 80). Сначала я не понимал, но, несмотря на отсутствие ошибок, выполняемых как под одним и тем же портом, кажется, что Web Deploy, по всей вероятности, первым отвел вместо IIS, вызвав эту ошибку. Я просто перевел привязку IIS к другому порту, и все хорошо.;)

Ответ 16

Чтобы <add name="WebDAVModule"/>, удалите следующую запись из ApplicationHost.config: <add name="WebDAVModule"/>

Запись находится в разделе модулей.

Точное расположение конфига: C:\Windows\System32\inetsrv\config\applicationHost.config

Ответ 17

Еще один важный модуль, который необходимо перенастроить перед тем, как PUT и DELETE будут работать, это глагол options

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

Также см. Этот пост: fooobar.com/questions/545597/...

Ответ 18

Вот что сработало для меня:

Откройте IIS и нажмите на свой сайт.

1 - Double Click on the Modules 2 - Right Click on WebDavPublishing and remove. 3 - Restart running WebSite.