2012-06-06 27 views
15

Trong vòng điều khiển API của tôi gọi là thanh toán, tôi có phương pháp sau đây:Ajax bài viết: 405 Phương pháp không được phép

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

Trong trang HTML của tôi, tôi có:

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

Bất cứ khi nào tôi cháy POST, Tôi nhận được

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

Tôi đang thiếu gì?

Cảm ơn bạn.

CẬP NHẬT

Dưới đây là các thông tin định tuyến (mặc định)

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

Trả lời

11

Nhiều khả năng định tuyến của bạn không được cấu hình cho các hành động được gọi. Do đó yêu cầu kết thúc trong hư không và ASP.NET Web API gửi một thông báo trống "phương pháp không được phép".

Bạn có thể vui lòng cập nhật câu hỏi bằng định tuyến của mình không?


CẬP NHẬT

Như tôi đã nghĩ! Bạn đang gửi tới http://localhost:65396/api/payment/charge trong khi bạn cần gửi đến http://localhost:65396/api/payment - giả sử trình điều khiển của bạn được gọi là PaymentController.

Lưu ý rằng tuyến đường không có action.

+0

Tôi chỉ đang sử dụng các tuyến đường mặc định. Tôi đã cập nhật câu hỏi. – Mike

+0

@Giống như cập nhật. Xóa 'phí'. – Aliostad

+0

Làm thế nào để tôi thực hiện nó gọi phương thức Charge? Tôi sẽ có các phương thức POST khác trong bộ điều khiển API này. – Mike

1

Tôi đã gặp vấn đề tương tự với bộ điều khiển của mình. Điều duy nhất khác với kết thúc của URL. Thêm "/" vào "http://localhost:65396/api/payment/charge" ở cuối, điều đó đã giúp tôi

Các vấn đề liên quan