Ajax Post: 405 Méthode Non Autorisée

dans mon Controller API appelé Payment, j'ai la méthode suivante:

[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;
}

dans ma page HTML j'ai:

$.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);
        }
    });

Chaque fois que je lance le POST, j'obtiens

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

Ce qui me manque?

je vous Remercie.

UPDATE

Voici les informations de routage (par défaut)

 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 }
            );
15
demandé sur Pavel Jounda 2012-06-06 19:11:28

3 réponses

très probablement votre routage n'est pas configuré pour que l'action soit invoquée. Par conséquent, la demande se termine en nulle part et ASP.NET L'API Web envoie un message vide "méthode non autorisée".

pouvez-vous s'il vous plaît mettre à jour la question avec votre routage?


UPDATE

comme je le pensais! Vous envoyez à l' http://localhost:65396/api/payment/charge alors que vous devez envoyer à http://localhost:65396/api/payment - en supposant que votre contrôleur est appelé PaymentController.

Notez que la route n'a pas action.

11
répondu Aliostad 2012-06-06 15:44:30
11
répondu Mike 2012-06-11 13:10:27

j'ai eu le même problème avec mon contrôleur. La seule chose qui est différente est la fin de L'URL. Ajouter " / "à"http://localhost:65396/api/payment/charge" à la fin, qui m'a aidé

1
répondu Pavel Jounda 2015-06-09 13:31:23