Почему глагол 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