在名为Payment的API控制器中,我有以下方法:
[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;
}
在我的HTML页面中,我有:
$.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);
}
});
每当我解雇POST时,我都会
"NetworkError: 405 Method Not Allowed - http://localhost:65396/api/payment/charge"
我错过了什么?
谢谢。
更新
这是路由信息(默认)
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 }
);
答案 0 :(得分:11)
很可能您的路由未配置为要调用的操作。因此,请求最终无处可去,ASP.NET Web API会发送一条空白消息“方法不允许”。
您可以通过路由更新问题吗?
正如我想的那样!您需要发送至http://localhost:65396/api/payment/charge
时发送至http://localhost:65396/api/payment
- 假设您的控制器被称为PaymentController
。
请注意,路线没有action
。
答案 1 :(得分:11)
原来我需要实施CORS支持。 http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx
答案 2 :(得分:1)
我的控制器遇到了同样的问题。 唯一不同的是URL的结尾。 最后在“http://localhost:65396/api/payment/charge”添加“/”,这有助于我