HTTP-глаголы PUT и DELETE: 405 Метод не разрешен - как разрешить? - PullRequest
0 голосов
/ 13 июня 2019

Я пробовал все предлагаемые обходные пути для ASP.NET, чтобы иметь возможность обратиться к моему веб-сервису REST с помощью HTTP-методов PUT и DELETE. Тем не менее, ни один из них, кажется, не работает. (т.е. удалить обработчик WebDAV или разрешить все глаголы в ExtensionlessHandler).

Что требуется в ASP.NET Core Web API (в IIS) для разрешения этих двух глаголов (HTTP PUT и DELETE)?

PS: я настроил наш проект веб-API с использованием CORS, но я получаю доступ к веб-службе с веб-страницы того же источника. Так что это не проблема CORS.

1 Ответ

0 голосов
/ 16 июня 2019

Через день я теперь нашел причину этой ошибки. Следующие причины вызвали эту ошибку:

  1. В вызове PUT произошла опечатка, поэтому метод Web API не вызывался. После исправления необходимо исправить следующие две проблемы:
  2. Недостаточно добавить префикс методов Web API к методу и пропустить соответствующие атрибуты ([HttpPut], [HttpDelete]). Таким образом, эти атрибуты должны были быть применены (это особенно относится к ASP.NET Core ).
  3. Недостаточно предоставить вышеуказанные атрибуты методам. Требовалось также указать параметры адреса метода (и строки запроса, соответственно) для этих атрибутов ([HttpPut("{id}")], [HttpDelete("id")]). (Это относится к ASP.NET Core .)

См. Базовый веб-API ASP.NET: Маршрутизация по имени метода? .


Я считаю, что " 405 метод не разрешен " - вполне неуместное сообщение об ошибке. Он не отражает ни одну из трех указанных выше причин и очень запутан.

Более того, я полагаю, что " 400 Bad Request ", " 404 Not Found ", или, скорее - " 501 Not реализовано ", будет иметь были более подходящие HTTP возвращаемые состояния.


Я создал проблему GitHub по этому вопросу:
«405: метод не разрешен» = вводящее в заблуждение сообщение об ошибке → Заменить на лучший код состояния HTTP

...