Ajax Post: 405 Method Not Allowed

匿名 (未验证) 提交于 2019-12-03 02:50:02

问题:

Within my API Controller called Payment, I have the following method:

[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 my HTML page I have:

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

Whenever I fire the POST, I get

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

What am I missing?

Thank you.

UPDATE

Here's the routing information (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 }             ); 

回答1:

Most likely your routing is not configured for the action to be invoked. Hence the request ends up in nowhere and ASP.NET Web API sends a blank-out message "method not allowed".

Can you please update the question with your routing?


UPDATE

As I thought! You are sending to http://localhost:65396/api/payment/charge while you need to send to http://localhost:65396/api/payment - assuming your controller is called PaymentController.

Note that route does not have action.



回答2:

Turns out I needed to implement CORS support. http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx



回答3:

I had the same problem with my controller. The only thing which is different is the ending of the URL. Add "/" to "http://localhost:65396/api/payment/charge" at the end, that helped me



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!