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 }
);
Il s'avère que j'avais besoin de mettre en œuvre le support CORS. http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx
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?
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
.
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é