405 Метод не разрешен — при использовании ASP.NET jQuery ajax POST

Я просмотрел множество различных существующих вопросов SO, связанных с аналогичной проблемой, но мне не удалось найти ничего, относящегося к моей проблеме.

У меня есть следующий код jQuery:

$.ajax({
   url: "Index.aspx/DeclineRequest"
   , type: 'POST'
   , contentType: 'application/json; charset=utf-8'
   , dataType: 'json'
   , data: JSON.stringify({ RequestId: requestId })
});

Я использую очень похожую технику для данных POST в другом веб-приложении ASP.NET, и это работает нормально. Однако это приложение возвращает следующую ошибку:

«NetworkError: метод 405 не разрешен — http://localhost:57255/....."

Я не могу найти ничего другого в этих двух приложениях, поэтому я не понимаю, почему это не работает.

Единственная разница между этими двумя приложениями, о которой я могу думать, заключается в том, что работающее — это .NET 2.0, а неработающее — .NET 3.5.

Я попытался добавить следующее в свой web.config, но все равно получаю ту же ошибку 405:

<webServices>
   <protocols>
     <add name="HttpPost"/>     
     <add name="HttpPostLocalhost"/>   
   </protocols>      
</webServices>

Как я могу решить эту проблему?

ОБНОВЛЕНИЕ (16:40): я переместил это приложение в IIS, и ошибка 405 больше не возвращается. Наша среда разработки, однако, только локальная. Почему эта ошибка только на локальном хосте?


person Curt    schedule 19.04.2012    source источник
comment
Можете ли вы показать нам свой DeclineRequest метод?   -  person ŁukaszW.pl    schedule 19.04.2012
comment
Это похоже на stackoverflow.com/questions/7430492/??   -  person huMpty duMpty    schedule 19.04.2012
comment
Метод @ ŁukaszW.pl DeclineRequest в данный момент просто вызывает return "Hello World". Я не думаю, что это проблема, поскольку ввод любого имени метода возвращает ту же ошибку. Я намеренно неправильно написал метод в некоторых тестах, чтобы проверить это.   -  person Curt    schedule 19.04.2012


Ответы (6)


Ошибки 405 часто возникают при использовании метода POST. Возможно, вы пытаетесь ввести какую-либо форму ввода на веб-сайте, но не все интернет-провайдеры разрешают метод POST, необходимый для обработки формы.

Все ошибки 405 могут быть связаны с конфигурацией веб-сервера и безопасностью, управляющей доступом к содержимому веб-сайта, поэтому ваш интернет-провайдер должен легко их объяснить.

http://www.checkupdown.com/status/E405.html

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

person Dimitri    schedule 19.04.2012
comment
Я просто делаю это через localhost в данный момент, используя VS 2010, поэтому у меня нет ведения журнала IIS. - person Curt; 19.04.2012
comment
Я видел много несоответствий между способами работы IIS и VS. Я бы попробовал настроить хост IIS и перейти оттуда. - person Dimitri; 19.04.2012
comment
Это отлично работает для другого моего приложения, работающего на той же машине с почти идентичным кодом. Так что установка IIS не кажется решением. - person Curt; 19.04.2012
comment
хорошо. Но вы все равно можете получить Fiddler и изучить запрос/ответ. - person Dimitri; 19.04.2012
comment
Я скачал fiddler, но на самом деле он не говорит мне намного больше, чем FireBug. - person Curt; 19.04.2012
comment
contentTypeString По умолчанию: 'application/x-www-form-urlencoded' При отправке данных на сервер используйте этот тип содержимого. По умолчанию это application/x-www-form-urlencoded, что подходит для большинства случаев. - person Dimitri; 19.04.2012

Возможно, вы опоздали на вечеринку, но попробуйте добавить в файл Web.Config:

< handlers >
   ....
       < remove name="WebDAV" />
   ....
< /handlers >

В этой статье объясняется, что может быть причиной проблемы:

http://www.asp.net/web-api/overview/testing-and-debugging/troubleshooting-http-405-errors-after-publishing-web-api-applications

person Stralos    schedule 29.04.2015

URL-адрес: «Index.aspx/DeclineRequest» не должен быть URL-адресом: «Index.aspx?DeclineRequest», не так ли?

Извините за довольно очевидное предложение, я раньше не видел такого URL. Вы его переписываете?

person Neil Thompson    schedule 19.04.2012
comment
Это формат вызова WebMethod, который вызывает метод DeclineRequest, определенный в программном коде Index.aspx. - person Dimitri; 19.04.2012

проверьте отправку запроса на сервер
параметры для отклоненияЗапрос - это объект со свойством RequesId ИЛИ имя string (или какой-либо другой тип данных) RequestId потому что в последнем случае вы можете просто отправить данные как JSON или обычную строку например RequestId=requestId
попробуйте заменить JSON.stringify({ RequestId: requestId }) чем-то более подходящим

person Parv Sharma    schedule 19.04.2012
comment
Даже без отправки каких-либо параметров я получаю ту же проблему - person Curt; 19.04.2012
comment
какой именно он ТИП параметра там? это какой-то ненулевой тип? - person Parv Sharma; 19.04.2012

Я предполагаю: в запросе вы говорите, что возвращаемый контент будет в формате JSON, но вы возвращаете простую строку в неправильном формате... Попробуйте вернуть правильный JSON или измените тип контента на обычный текст для теста...

person ŁukaszW.pl    schedule 09.05.2012

удалите этот код dataType: 'json' из своего кода и запустите

person Kasun    schedule 14.12.2012
comment
Это определенно не правильный ответ. тип данных не имеет ничего общего с ошибкой CORS. - person Baradwaj Aryasomayajula; 05.07.2016