Ajax Post: 405 Méthode non autorisée
Dans mon API Contrôleur appelé le 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 lance le POST, je reçois
"NetworkError: 405 Method Not Allowed - http://localhost:65396/api/payment/charge"
Ce qui me manque?
Merci.
Mise à 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 }
);
source d'informationauteur Mike
Vous devez vous connecter pour publier un commentaire.
Plus probable que votre routage n'est pas configuré pour que l'action soit invoquée. D'où la demande arrive de nulle part et ASP.NET l'API Web envoie un vide-message de "méthode non autorisée".
Pouvez vous s'il vous plaît mise à jour de la question avec votre routage?
Mise à JOUR
Que je 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 est appeléPaymentController
.Noter que la route n'a pas
action
.S'avère que j'ai besoin pour mettre en œuvre le soutien de la SCRO. http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx
J'ai eu le même problème avec mon contrôleur.
La seule chose qui est différent est la fin de l'URL.
Ajouter un "/" à "http://localhost:65396/api/payment/charge" à la fin, qui m'a aidé à