2012-06-06 27 views
15

Dentro de mi controlador de API denominada Pago, tengo el siguiente método:Ajax de la publicación: 405 Método no permitido

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

En mi página HTML que tengo:

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

Cada vez que enciendo el POST, Obtengo

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

¿Qué me falta?

Gracias.

ACTUALIZACIÓN

Aquí está la información de enrutamiento (por defecto)

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

Respuesta

11

Lo más probable es que su enrutamiento no está configurado para la acción que se invoca. Por lo tanto, la solicitud termina en ninguna parte y ASP.NET Web API envía un mensaje en blanco "método no permitido".

¿Puede actualizar la pregunta con su ruta?


ACTUALIZACIÓN

como pensaba! Está enviando a http://localhost:65396/api/payment/charge mientras necesita enviar a http://localhost:65396/api/payment - suponiendo que su controlador se llama PaymentController.

Tenga en cuenta que la ruta no tiene action.

+0

Solo estoy usando las rutas predeterminadas. He actualizado la pregunta. – Mike

+0

@Mike respuesta actualizada. Eliminar 'carga '. – Aliostad

+0

¿Cómo hago para que invoque el método de carga, entonces? Voy a tener otros métodos POST dentro de este controlador API. – Mike

Cuestiones relacionadas