"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. Я надеюсь, что кто-то может пролить свет на это для меня.

1169   17  

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 вещи, которые нужно сделать для сайта, который вы хотите разместить (выберите сайт):

  1. открыть WebDav Authoring Rules и выберите Disable WebDAV опция присутствует на правой панели.

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

  3. выберите HandlerMapping найти WebDAVHandler и удалить оно.

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

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

Информационные Службы Интернета=> World Wide Web Services=> общие функции HTTP

enter image description here

по какой-то причине, маркировка WebDAVModule как "удалить" в моей сети.конфигурации было недостаточно, чтобы решить проблему в моем случае.

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

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

Это предотвращает 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

    Ничего не найдено.