2012-06-06 16 views
15

w moim API kontrolera o nazwie Płatności, mam następujący sposób:Ajax Post: 405 Method Not Allowed

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

W mojej stronie HTML mam:

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

Ilekroć ogień POST Dostaję

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

Czego mi brakuje?

Dziękuję.

UPDATE

Oto informacje routingu (domyślnie)

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

Odpowiedz

11

Najprawdopodobniej routingu nie jest skonfigurowany do działania powoływać. Stąd wniosek kończy się donikąd i ASP.NET Web API wysyła komunikat pusty "metoda niedozwolona".

Czy możesz zaktualizować pytanie swoim routingiem?


UPDATE

Tak jak myślałem! Wysyłasz do http://localhost:65396/api/payment/charge, podczas gdy musisz wysłać do http://localhost:65396/api/payment - zakładając, że twój kontroler nazywa się PaymentController.

Pamiętaj, że trasa nie ma action.

+0

Używam tylko domyślnych tras. Zaktualizowałem to pytanie. – Mike

+0

@Mike zaktualizowana odpowiedź. Usuń 'charge'. – Aliostad

+0

Jak mogę w takim razie wywołać metodę Charge? Będę miał inne metody POST w tym kontrolerze API. – Mike

Powiązane problemy