Вопрос по asp.net-web-api, http-status-code-405, wcf-web-api – Сообщение Ajax: метод 405 не разрешен

15

В моем контроллере 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 }
            );

Ваш Ответ

3   ответа
11

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

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

UPDATE

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

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

Я просто использую маршруты по умолчанию. Я обновил вопрос. Mike
@ Майк обновил ответ. Удалитьcharge.
С RC вы не сможете. В бета вы можете добавитьaction к маршруту, но я услышал в твиттере (не пытался сам), что это не может быть сделано сейчас. Попробуйте сaction в маршруте посмотрите, работает ли он.
Оказывается, мне нужно было реализовать поддержку CORS. Я использовал эту ссылку в качестве руководства.blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/… Mike
Как сделать так, чтобы он вызывал метод Charge? Я собираюсь использовать другие методы POST в этом контроллере API. Mike
11
Эта статья кажется более актуальной ...stevefenton.co.uk/Content/Blog/Date/201211/Blog/…
1

Единственное, что отличается, это конец URL. Добавить & quot; / & quot; на & quot;HTTP: // локальный: 65396 / API / оплаты / плата& Quot; в конце концов, это помогло мне

Похожие вопросы