Ajax Post:405方法不允许

时间:2012-06-06 15:11:29

标签: asp.net-web-api wcf-web-api http-status-code-405

在名为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 }
            );

3 个答案:

答案 0 :(得分:11)

很可能您的路由未配置为要调用的操作。因此,请求最终无处可去,ASP.NET Web API会发送一条空白消息“方法不允许”。

您可以通过路由更新问题吗?


更新

正如我想的那样!您需要发送至http://localhost:65396/api/payment/charge时发送至http://localhost:65396/api/payment - 假设您的控制器被称为PaymentController

请注意,路线没有action

答案 1 :(得分:11)

答案 2 :(得分:1)

我的控制器遇到了同样的问题。 唯一不同的是URL的结尾。 最后在“http://localhost:65396/api/payment/charge”添加“/”,这有助于我