Сообщение Ajax: метод 405 не разрешен

В моем контроллере API под названием Payment у меня есть следующий метод:

[HttpPost]
public HttpResponseMessage Charge(Payment payment)
{
    var processedPayment = _paymentProcessor.Charge(payment);
    var response = Request.CreateResponse(processedPayment.Status != "PAID" ? HttpStatusCode.ExpectationFailed : HttpStatusCode.OK, processedPayment);
    return response;
}

На моей странице HTML у меня есть:

$.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "http://localhost:65396/api/payment/charge",
        data: $('#addPayment').serialize(),
        dataType: "json",
        success: function (data) {
            alert(data);
        }
    });

Всякий раз, когда я запускаю POST, я получаю

"NetworkError: 405 Method Not Allowed - http://localhost:65396/api/payment/charge"

Что мне не хватает?

Спасибо.

ОБНОВИТЬ

Вот информация о маршрутизации (по умолчанию)

 routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

person Mike    schedule 06.06.2012    source источник


Ответы (3)


Скорее всего, ваша маршрутизация не настроена для запуска действия. Следовательно, запрос заканчивается в никуда, и веб-API ASP.NET отправляет пустое сообщение «метод не разрешен».

Не могли бы вы обновить вопрос с вашей маршрутизацией?


ОБНОВИТЬ

Как я думал! Вы отправляете на http://localhost:65396/api/payment/charge, а вам нужно отправить на http://localhost:65396/api/payment — при условии, что ваш контроллер называется PaymentController.

Обратите внимание, что маршрут не имеет action.

person Aliostad    schedule 06.06.2012
comment
Я просто использую маршруты по умолчанию. Я обновил вопрос. - person Mike; 06.06.2012
comment
Как мне заставить его вызывать метод Charge? У меня будут другие методы POST в этом контроллере API. - person Mike; 06.06.2012
comment
С RC вы, возможно, не сможете. В бета-версии вы могли добавить action к маршруту, но я слышал в твиттере (сам не пробовал), что сейчас это невозможно сделать. Попробуйте с action в маршруте, посмотрите, работает ли это. - person Aliostad; 06.06.2012
comment
Оказывается, мне нужно было реализовать поддержку CORS. Я использовал эту ссылку в качестве руководства. blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/ - person Mike; 11.06.2012

Оказывается, мне нужно было реализовать поддержку CORS. http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx

person Mike    schedule 11.06.2012
comment
Эта статья кажется более актуальной... stevefenton.co.uk/Content/Blog/Date/201211/Blog/ - person Justin; 21.11.2012

У меня была такая же проблема с контроллером. Единственное, что отличается, это окончание URL. Добавьте "/" к "http://localhost:65396/api/payment/charge" в конец, который помог мне

person Pavel Jounda    schedule 09.06.2015