web-dev-qa-db-fra.com

Ajax Post: Méthode 405 non autorisée

Dans mon contrôleur API appelé Paiement, 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 tire le POST, je reçois 

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

Qu'est-ce que je rate?

Je vous remercie.

METTRE À JOUR

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
Mike
11
Mike

Très probablement, votre routage n'est pas configuré pour que l'action soit appelée. Par conséquent, la demande aboutit nulle part et l’API Web ASP.NET envoie un message de suppression «méthode non autorisée».

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


METTRE À JOUR

Comme je le pensais! Vous envoyez à http://localhost:65396/api/payment/charge alors que vous devez envoyer à http://localhost:65396/api/payment - en supposant que votre contrôleur s'appelle PaymentController.

Notez que la route n'a pas action.

11
Aliostad

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

1
Pavel Jounda