"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 для моего веб-приложения, все равно возникает та же ошибка.
Я подозреваю, что это проблема, связанная с IIS. Я надеюсь, что кто-то может пролить свет на это для меня.
17 ответов:
часто эта ошибка вызвана модулем WebDAV, который пытается обрабатывать такого рода запросы. Простое решение-удалить его из модулей и из обработчиков только внутри вашей сети.конфигурационный файл. Вот пример конфигурации:
<system.webServer> <modules> <remove name="WebDAVModule" /> </modules> <handlers> <remove name="WebDAV" /> </handlers> </system.webServer>
Я включил трассировку неудачного запроса и получил следующую информацию:
<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 очень полезна.
У меня была эта проблема с WebDAV при размещении проекта MVC4 WebApi. Я обошел его, добавив эту строку в сеть.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
принято от здесь и это сработало для меня :
1.Перейдите в Диспетчер IIS.
2.Нажмите на свое приложение.
3.Перейдите в раздел "сопоставления обработчиков".
4.In список функций, дважды щелкните на "WebDAV".
5.Нажмите на кнопку "Запросить ограничения".
6.In на вкладке " глаголы "выберите" все глаголы".
7.Нажмите кнопку ОК.
удаление WebDAV-модуля должно быть достаточно. Просто измените свой веб.config:
<system.webServer> <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule" />
я попробовал большинство ответов и, к сожалению, ни один из них не работал в завершении.
вот что сработало для меня. Есть 3 вещи, которые нужно сделать для сайта, который вы хотите разместить (выберите сайт):
открыть
WebDav Authoring Rulesи выберитеDisable WebDAVопция присутствует на правой панели.выберите
ModulesнайтиWebDAV Moduleи удалить его.выберите
HandlerMappingнайтиWebDAVHandlerи удалить оно.перезапустите IIS.
по какой-то причине, маркировка WebDAVModule как "удалить" в моей сети.конфигурации было недостаточно, чтобы решить проблему в моем случае.
Я нашел другой подход, который сделал решить проблему. Если вы находитесь в одной лодке, попробуйте это:
- в Диспетчере IIS выберите приложение, которое должно поддерживать PUT.
- в представлении функций найдите Правила Создания WebDAV. Дважды щелкните его или выберите Открыть Функции из контекстного меню (правой кнопкой мыши).
- в области действия найдите и нажмите на Настройки WebDAV....
- в настройках WebDAV найдите Поведение Фильтрации Запросов, и под этим, найти Разрешить Фильтрацию Команд. Набор Разрешить Фильтрацию Команд до ложные.
- в области действия щелкните применить.
Это предотвращает WebDAV от отклонения глаголов, которые он не поддерживает, таким образом позволяя PUT беспрепятственно проходить к вашему спокойному обработчику.
У меня были те же проблемы с PUT, PATCH и DELETE, но ничего не было с установленным WebDav. Резолюция 1 в этой статье, наконец, помогла мне:http://support.microsoft.com/kb/942051
для меня эта ошибка не исчезнет и не позволит использовать методы PUT, что бы я ни делал.. удалил webdav, поставил конфигурацию в web.config для удаления webdav из обработчиков и модулей и настройки PUT в качестве разрешенной команды в фильтрах запросов на iis.. и обеспечить сопоставления обработчика обработки запросов IIS поставил настроен..
моя проблема была в конечном итоге из-за плохой установки ASP.NET 4.5 расширения. Удалено все, что связано с asp.net из ролей и компонентов сервера. возобновленный. прочитал роли и перезапустил. все работало с выше конфигурации.
--- ниже будет принято PUT, но отправит его в неправильный обработчик. -- игнорировать ниже
наконец, добавляя поставить глагол глагол как разрешили на след сопоставления обработчика в IIS работал.. поскольку я включил трассировку неудачных ошибок, и этот глагол не разрешал глагол.
в прошлый раз у меня была такая же проблема на IIS другого сервера, это было связано с отсутствием ' / ' в конце URL-адреса, так как он использовал обработчик по умолчанию без использования документа по умолчанию, вероятно, и теперь я это понимаю.. поэтому проверьте сопоставления обработчиков IIS, если ничто другое не помогает.
У меня была эта проблема, но ничего не связано с WebDAV была проблема. В моем случае клиент отправлял сообщение www.myServer.com/api/chart. этот вызов должен быть обработан "ExtensionlessUrlHanlder-Integrated-4.0", однако, каким-то образом локальная файловая структура была создана в моем каталоге сервера"...\Server\api\chart\". Это означало, что вместо этого вызывается обработчик "StaticFile". Удаление этих локальных файлов, наконец, решило проблему.
еще один совет от меня. Я использовал PHP + IIS, и сопоставления обработчиков для PHP не имели глагола PUT.
заходим в Диспетчер служб IIS->ваш сайт->отображения->обработчик PHPxx_via_FastCGI->ограничения->запрос глаголы, затем добавить поставить.
для Windows server 2012 - > перейдите в диспетчер серверов - > удалить роли и компоненты - > роли сервера - > веб-сервер (IIS) - > веб-сервер - > общие функции HTTP - > снимите флажок публикация WebDAV и удалите его - > перезапустить сервер.
если пул приложений IIS работает в классическом режиме, убедитесь, что в вашем интернете есть следующее.конфигурации
<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" />
в моем случае я переместил Web Deploy на другой порт, который также был портом IIS (а не 80). Сначала я не понял, но даже при том, что не было никаких ошибок, запущенных под одним и тем же портом, кажется, Web Deploy, скорее всего, отвечал первым вместо IIS по какой-то причине, вызвав эту ошибку. Я просто переместил привязку IIS в другой порт, и все в порядке. ;)
чтобы WebDav вообще не включался, удалите следующую запись из ApplicationHost.конфиг:
<add name="WebDAVModule" />запись находится в разделе модули.
точное расположение конфигурации:
C:\Windows\System32\inetsrv\config\applicationHost.config
еще один важный модуль, который нуждается в перенастройке перед тем, как поставить и удалить, будет работать-это глагол 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>Также см. Этот пост: https://stackoverflow.com/a/22018750/9376681

Comments