405 Метод не разрешен для PUT и DELETE в ASP.NET WebAPI - PullRequest
0 голосов
/ 03 марта 2019

Я построил некоторые конечные точки API, используя ASP.NET Web API.Когда я пытался сделать PUT или DELETE запрос, я получил 405 метод не разрешен ошибка.Но он отлично работает для GET и POST запроса.

Интересно, что PUT и DELETE работают хорошо, когда я размещаю проект в локальном IIS.Выдает только ошибку 405 на сервере DEV .

На моем web.config :

    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" />
    <httpModules>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
    </httpModules>
  </system.web>
  <system.webServer>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <validation validateIntegratedModeConfiguration="false" />
    <modules>
      <remove name="ApplicationInsightsWebTracking" />
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" />
    </modules>
  </system.webServer>

Чтоя здесь скучаю?Заранее спасибо.

1 Ответ

0 голосов
/ 03 марта 2019

Если вы используете Visual Studio 2012 или более позднюю версию для разработки приложения веб-API, IIS Express является веб-сервером по умолчанию.Этот веб-сервер представляет собой уменьшенную версию полной функциональности IIS, которая поставляется в серверном продукте, и этот веб-сервер содержит несколько изменений, которые были добавлены для сценариев разработки.Например, модуль WebDAV часто устанавливается на производственном веб-сервере, на котором установлена ​​полная версия IIS, хотя он может и не использоваться в действительности.

Установочная версия IIS (IIS Express) устанавливаетмодуль WebDAV, , но записи для модуля WebDAV преднамеренно закомментированы, поэтому модуль WebDAV никогда не загружается в IIS Express .В результате ваше веб-приложение может корректно работать на локальном компьютере, но вы можете столкнуться с ошибками HTTP 405. при публикации приложения веб-API на рабочем веб-сервере.

, поскольку ваш сервер DEV имеет полную функциональность IIS (с WebDAV) он зарегистрирует несколько обработчиков для одного и того же глагола / метода, и один из обработчиков блокирует ожидаемый обработчик от обработки запроса.

Итак, WebDAV переопределяет ваши HTTP PUT и DELETE.Во время обработки запроса HTTP PUT IIS вызывает модуль WebDAV. Когда вызывается модуль WebDAV, он проверяет свою конфигурацию и видит, что он отключен, поэтому он возвращает ошибку HTTP 405 Method Not Allowed для любого запроса, который напоминает запрос WebDAV.

Вы можете прочитать больше здесь https://docs.microsoft.com/en-us/aspnet/web-api/overview/testing-and-debugging/troubleshooting-http-405-errors-after-publishing-web-api-applications

Чтобы отключить WebDAV, добавьте следующее в ваш web.config

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