"Метод 405 не дозволений" в IIS7.5 для методу "PUT"


113

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

Відповіді:


214

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

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

2
Використовуючи наступну статтю MS, я додав тег видалення до обробників, але він все ще не працював. Завдяки вашій відповіді я бачу, що мені також потрібно було додати його до розділу модулів. Цінується. Ось стаття: asp.net/web-api/overview/testing-and-debugging/…
Tod Birdsall

Чудово, ти врятував мені години болісної налагодження! :)
Kaspars Ozols

Просто та легко виправити, спасибі!
MorenajeRD

Я спробував це, але не працює для мене. Я все ще отримую помилку 405 - метод не дозволений. Зауважте, що я використовую IIS Express і помилка якось виникає лише на PUT, але працює для GET, POST AND DELETE.
Тьеррі

46

Я ввімкнув невдале відстеження запиту та отримав таку інформацію:

 <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 дуже корисна.


1
Дякую за вашу відповідь ! Після 2-х днів досліджень, єдиним робочим рішенням, яке я виявив уникати "405 Метод не дозволений", було визначення заголовків CORS у Application_BeginRequestметоді, про що йдеться у цій відповіді stackoverflow.com/a/14631068/827168 . Але ваша відповідь краща за всі інші, оскільки вона допомагає виявити проблему замість застосування якогось випадкового виправлення :)
pomeh

@pomeh Я завжди вірю в те, щоб зробити логіку завершеною. :)
smwikipedia


1
Зауважте, ви також повинні зайти в Mapper Mappings та видалити WebDAV звідти, інакше ви отримаєте повідомлення про помилку Handler "WebDAV" has a bad module "WebDAVModule" in its module list.
pipedreambomb

26

У мене була проблема з 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


Найкраще рішення для того, хто насправді потребує WebDAV. Чи потрібен комусь WebDAV - це окрема дискусія.
MrBoJangles

24

Взято звідси і це працювало для мене:

1.Перейти до менеджера IIS.

2. Клацніть на своєму додатку.

3.Перейти до "Опрацювання відображень".

4.У списку функцій двічі клацніть на "WebDAV".

5. Клацніть на "Запит обмежень".

6.У вкладці "Дієслова" виберіть "Усі дієслова".

7. Натисніть ОК.


3
Це мені допомогло, але я уточнимо зі своїм досвідом. 2. (Веб-сервіс) додаток. 3. двічі клацніть піктограму Оброблювальне відображення на центральній панелі.
Гарі

19

Я спробував більшість відповідей і, на жаль, жодна з них не працювала на завершення.

Ось що для мене спрацювало. На сайті, для якого потрібно PUT, виберіть 3 речі (виберіть сайт):

  1. Відкрийте, WebDav Authoring Rulesа потім виберіть Disable WebDAVпараметр, присутній на правій панелі.

  2. Виберіть Modules, знайдіть WebDAV Moduleі видаліть його.

  3. Виберіть HandlerMapping, знайдіть WebDAVHandlerі видаліть його.

Перезапустіть IIS.


Це працює! Не знаю, чи можна виконати всі 3 дії шляхом редагування файлу web.config, але це спростило лише використання консолі управління IIS. Зауважте лише, що є 3 записи HandlerMapping, що починаються з WebDAV * - я видалив усі 3 і життя було гарним.
SlimsGhost

1
Я спробував видалити WebDav, і нічого не вийшло. Потім я пройшов усі три кроки вище і PUTпочав працювати.
redyesdev

1
Кроки 2 і 3 можуть бути застосовані до віртуальної директорії, не впливаючи на решту сайту.
Тонатіо

1
Дуже дякую. ти врятував мене. Після 7 годин розчарування спробував усі відповісти, що я міг, і нарешті ваша відповідь вразила мене. :)
Zeeshan Сафдар

1
Спасибі, це все.
Ахмад Хамді

17

Видалення WebDAV-модуля повинно бути достатнім. Просто змініть свій Web.config:

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

14

Найкраще просто видалити невикористану функцію WebDAV. Перейдіть у розділ Програми та функції => Увімкніть або вимкніть функції Windows та відключіть публікацію WebDAV у розділі

Інтернет-сервіси інформації => Веб-сервіси всесвітньої мережі => Загальні функції HTTP

введіть тут опис зображення


Дякую ! Це повністю вирішило мою проблему!
wmehanna

4

З будь-якої причини позначення WebDAVModule як "видалити" в моєму web.config було недостатньо, щоб вирішити проблему в моєму випадку.

Я знайшов інший підхід , який зробив вирішити цю проблему. Якщо ви в одному човні, спробуйте це:

  1. У IIS Manager виберіть програму, яка повинна підтримувати PUT.
  2. У розділі "Перегляд функцій" знайдіть Правила розробки WebDAV . Двічі клацніть по ньому або виберіть Відкрити функцію у контекстному меню (клацніть правою кнопкою миші).
  3. На панелі Дії, знайдіть і натисніть на WebDAV Settings ... .
  4. У налаштуваннях WebDAV знайдіть Запит поведінки на фільтрування та під цим знайдіть Дозволити фільтрацію дієслів . Встановіть дозволити фільтр дієслів на помилковий .
  5. На панелі "Дії" натисніть Застосувати .

Це не дозволяє WebDAV відкидати дієслова, які він не підтримує, тим самим дозволяючи PUT перетікати на ваш RESTful обробник безперешкодно.


4

Ще одна порада від мене. Я використав PHP + IIS, і в Mapper Mappings для PHP не було дієслова PUT.

Перейдіть до менеджера IIS-> Ваш сайт-> Зображення обробника-> PHPxx_via_FastCGI-> Запит обмежень-> Дієслова, а потім додайте PUT.

Це воно!


1
Це відповідь, яку потребують користувачі php.
SpeedOfRound

4

Ще один важливий модуль, який потребує перенастроювання перед тим, як працюватимуть 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



3

Я використовував Angular 8 і був .NET core API. Я додаю наступне у свій службовий файл web.config. Це вирішує мою помилку.

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

2

Для мене ця помилка не піде і дозволить методам PUT, що б я не робив .. видалив webdav, поставив конфігурацію в web.config для видалення webdav з обробників та модулів та встановив PUT як дозволене дієслово на фільтрах запитів на iis .. та переконайтеся, що відображення iis обробника обробляти запит налаштовано PUT ..

Моя проблема зрештою була через погану установку розширень ASP.NET 4.5. Видалено все, що стосується asp.net, із ролей та функцій сервера. перезапущено. перечитав ролі та перезапустив. все працювало з вищезгаданим конфігурацією.

--- Наведене нижче дозволить PUT прийняти, але надішле його неправильному оброблювачу. --вважайте нижче

нарешті, додавання дієслова PUT як дозволеного дієслова на картографічному обробці TRACE в iis спрацювало .. оскільки я ввімкнув невдале відстеження помилок, і це дієслово не дозволило дієслову.

востаннє у мене була така ж проблема на IIS IIS сервера, це було через відсутність '/' в кінці URL, оскільки він використовував обробник за замовчуванням без використання документа за замовчуванням, ймовірно, і тепер я розумію, що .. так що перевірте IIS відображення обробника, якщо нічого іншого не допомагає.


2

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


2

Ось що для мене спрацювало:

Відкрийте IIS і натисніть на свій сайт.

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


1

Для сервера Windows 2012 -> Перейти до менеджера серверів -> Видалити ролі та функції -> Ролі сервера -> Веб-сервер (IIS) -> Веб-сервер -> Загальні функції HTTP -> Зніміть прапорець біля пункту Видалення WebDAV та видаліть його -> Перезапустити сервер.


0

Якщо пул додатків 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" />

0

У моєму випадку я перемістив Web Deploy на інший порт, який також був портом IIS (не 80). Я спочатку не усвідомлював, але, хоч і не було помилок під час роботи під одним і тим же портом, схоже, Web Deploy з певних причин швидше за все реагував замість IIS, викликаючи цю помилку. Я щойно перемістив прив’язку IIS до іншого порту, і все добре. ;)


0

Щоб WebDav взагалі не ввімкнувся, видаліть із ApplicationHost.config такий запис: <add name="WebDAVModule" />

Запис розташований у розділі модулів.

Точне розташування конфігурації: C:\Windows\System32\inetsrv\config\applicationHost.config


0

У мене була така ж проблема, коли RESTful API працює на ядрі aspnet.

Я не хотів видаляти WebDAV, і я спробував більшість описаних вище засобів захисту. Я намагався встановити дієслова = "*" як на сайті, так і на самому сервері, але без успіху.

Що для мене трюк:

IIS Manager -> Сайти -> MySite -> HandlerMappings -> aspNetCore -> Редагувати

-> Запит обмежень -> Доступ -> Немає (це був сценарій).

Після цього все спрацювало, навіть якщо я замінив оригінальні параметри WebDAV.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.