Почему глагол HTTP DELETE возвращает ошибку 405 - метод не разрешен для моей службы RESTful WCF, работающей на IIS 7.5?

Кто-нибудь может пролить свет на это? Я чувствую, что сегодня потратил впустую весь день, охотясь и ища в интернете любую информацию о том, как это сделать. Я создал очень простой сервис WCF RESTful. Это в основном доказательство концепции. У меня есть простая база данных, и я просто пытаюсь заставить ее работать, чтобы я мог просматривать, создавать, обновлять и удалять элементы. Прямо сейчас у меня только просмотр и обновление работают. Я займусь созданием позже. Пока я не могу понять, почему удаление не работает. Почти все, что я нашел до сих пор, говорит мне, что мне нужно отключить модуль WebDAV. Я сделал это, а затем я получил PUT на работу. Но я не могу заставить УДАЛИТЬ работать. Всякий раз, когда я пытаюсь вызвать DELETE через мой сервис, я получаю следующую ошибку:

Удаленный сервер возвратил неожиданный ответ: (405) Метод не разрешен.

Таким образом, кажется, что где-то на моем сервере это не позволяет глагол УДАЛИТЬ. Но за жизнь я не могу в этом разобраться. Я уже проверил отображения обработчиков, и обработчик разрешает все глаголы для расширения.SVC. Я отключил WebDAV. Я не совсем уверен, где еще искать. Я использую IIS 7.5 на Windows Server 2008 R2.

(Я могу предоставить код, если это вообще поможет)

Спасибо Кори

4 ответа

Решение

Я просто потратил кучу времени, пытаясь выяснить, почему я продолжал получать метод 405 Not Allowed при использовании глагола DELETE. Все, что я прочитал, говорило об удалении WebDAV из IIS, но, похоже, это сломало IIS, так как все сайты выдавали 503 ошибки. Я переустановил его, а затем начал искать в IIS некоторые настройки.

Оказывается, проблема заключается в WebDAV, и на странице функций IIS есть узел с именем "WebDAV Authoring". Нажав на это, вы можете нажать на " Настройки WebDAV...", чтобы открыть страницу свойств. В разделе "Поведение фильтрации запросов" установите для параметра " Разрешить фильтрацию глаголов" значение " Ложь", что, похоже, помогло мне (YMMV).

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

На случай, если у кого-то возникнет такая же проблема.

Вот еще один способ, которым вы можете попробовать.

в web.config

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

Откройте сопоставления обработчиков вашего сайта в IIS Manager

Отредактируйте каждый обработчик, с помощью которого вы хотите УДАЛИТЬ, щелкнув Запретить запрос, выбрав вкладку Глаголы, затем добавьте УДАЛИТЬ в список "Один из следующих" или, если необходимо, разрешите все глаголы.

Возможно, вам придется перезагрузить ваш сайт и / или перекомпилировать код

Ну, я не уверен, что это действительно ответ на мой вопрос, но он решил проблему. Я просто запустил новый проект в Visual Studio и на этот раз использовал шаблон службы.NET REST, который нашел в Интернете. Затем я перенес старый код, который у меня был с предыдущей попытки, и использовал его в новом проекте. Оно работало завораживающе. Все четыре глагола теперь работают правильно (GET, PUT, POST и DELETE). Так что это работает сейчас.

Corey

Другие вопросы по тегам