2012-06-06 15 views
15

genannt Zahlung, ich habe die folgende Methode:Ajax Beitrag: 405 Methode nicht in meinem API-Controller erlaubt

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

In meiner HTML-Seite hat ich:

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

Immer, wenn ich die POST-Feuer, Ich bekomme

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

Was fehlt mir?

Vielen Dank.

UPDATE

Hier ist die Routing-Informationen (default)

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

Antwort

11

Wahrscheinlich Ihr Routing ist nicht für die Aktion konfiguriert aufgerufen werden. Daher endet die Anforderung im Nirgendwo und ASP.NET Web API sendet eine leere Nachricht "Methode nicht zulässig".

Können Sie bitte die Frage mit Ihrem Routing aktualisieren?


UPDATE

Wie ich dachte! Sie senden an http://localhost:65396/api/payment/charge, während Sie senden müssen an http://localhost:65396/api/payment - vorausgesetzt, Ihr Controller heißt PaymentController.

Beachten Sie, dass die Route action nicht hat.

+0

Ich verwende nur die Standardrouten. Ich habe die Frage aktualisiert. – Mike

+0

@Mike aktualisierte Antwort. Entfernen Sie "Ladung". – Aliostad

+0

Wie kann ich die Charge-Methode aufrufen? Ich werde andere POST-Methoden innerhalb dieses API-Controllers haben. – Mike