Ajax提交:405方法不允许。

16

在我的API控制器中,名为Payment,我有以下方法:

[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个回答

11

很可能您的路由没有配置要调用的操作。因此,请求最终无处安放,ASP.NET Web API 发送了一条空白信息“方法不允许”。

请问您能否更新问题的路由配置?


更新

就像我想的那样! 您正在发送到http://localhost:65396/api/payment/charge,而您需要发送到http://localhost:65396/api/payment - 假设您的控制器名为PaymentController

请注意,该路由没有action属性。


我只是使用默认路由。我已经更新了问题。 - Mike
我该如何使其调用Charge方法呢?我将在此API控制器中有其他POST方法。 - Mike
使用RC可能无法实现。在beta版本中,您可以将action添加到路由中,但我听说(自己没有尝试过)现在无法这样做。尝试在路由中加入action,看看是否有效。 - Aliostad
结果发现我需要实现CORS支持。我使用了这个链接作为指南。http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx - Mike

11

5
这篇文章似乎更新了一些...... http://www.stevefenton.co.uk/Content/Blog/Date/201211/Blog/Using-CORS-With-ASP-NET-Web-API/ - Justin

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接