Веб-API Asp.NET - 405 - HTTP-глагол, используемый для доступа к этой странице, недопустим - как установить сопоставления обработчика - PullRequest
91 голосов
/ 24 марта 2012

Я написал REST-сервис, используя ASP.NET Web API. Я пытаюсь отправить запрос HttpDelete, но получаю следующую ошибку:

405 - HTTP-глагол, используемый для доступа к этой странице, запрещен

Я думаю, что я близок к решению, я обнаружил, что мне нужно включить удаленное управление IIS, перейти в раздел «Сопоставления обработчиков» и добавить глагол «DELETE» в соответствующую позицию ... но проблема в том, что в списке много разных позиций ... (как здесь: http://www.somacon.com/p126.php).

Какой из них я должен редактировать? Немногие из них не имеют расширения, например «ExtensionUrlHandler-Integrated-4.0», и я добавил к нему глагол DELETE, но он все равно не работает ...

Это был просто выстрел в темноте, чтобы изменить этот, так что я должен изменить другое положение? Если да, то какой? Или, может быть, есть что-то еще, что я должен сделать?

Тот же веб-сервис отлично работает на моем локальном сервисе, так что я думаю, проблема в удаленном IIS ...

Привет

Ответы [ 13 ]

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

Я добавлю для тех, кто застрял при попытке запустить PHP (Laravel в случае необходимости) или другую уникальную IIS ситуацию с хостингом с 405 error, которую вам нужно изменить verbs вобработчик для этой конкретной ситуации ... поэтому, поскольку я использовал PHP, я перешел к обработчику PHP и на вкладке Request Restrictions, а затем на вкладку * 1009, добавил verbs, что вам нужно.Это было все, что мне нужно было добавить к web.config, чтобы включить CORS в Laravel.

<handlers>
  <remove name="php-5.6.40" />
  <add name="php-5.6.40" path="*.php" verb="GET,HEAD,POST,PUT,DELETE,OPTIONS" modules="FastCgiModule" scriptProcessor="C:\Program Files (x86)\PHP\v5.6\php-cgi.exe" resourceType="Either" requireAccess="Script" />
</handlers>
0 голосов
/ 16 ноября 2015

Помимо всех вышеперечисленных решений, проверьте, есть ли у вас "id" или какой-либо другой пользовательский параметр в методе DELETE соответствует конфигурации маршрута.

public void Delete(int id)
{
    //some code here
}

Если вы нажали многократный 405Из-за ошибок лучше сбросьте сигнатуру метода по умолчанию, как описано выше, и попробуйте.

Конфигурация маршрута по умолчанию будет искать id в URL.Поэтому имя параметра id здесь важно, если вы не измените конфигурацию маршрута в папке App_Start.

Однако вы можете изменить тип данных id.

Например,метод, описанный ниже, должен работать просто отлично:

public void Delete(string id)
{
    //some code here
}

Примечание. Также убедитесь, что вы передаете данные через URL , а не , метод данных, который будет переносить полезную нагрузку в качестве основного содержимого.

DELETE http://{url}/{action}/{id}

Пример:

DELETE http://localhost/item/1

Надеюсь, это поможет.

0 голосов
/ 29 октября 2014

В нашем случае проблема была в федеративном входе между сайтом .Net и ADFS.При перенаправлении на конечную точку ADFS для параметра wctx требовались все три параметра для метода WSFederationAuthenticationModule.CreateSignInRequest: rm, id и ru

Спасибо Гийому Раймонду за подсказку для проверкиПараметры URL!

...