"Метод 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.