Ajax Post:405方法不允许

Mik*_*ike 16 http-status-code-405 wcf-web-api asp.net-web-api

在名为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;
}
Run Code Online (Sandbox Code Playgroud)

在我的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);
        }
    });
Run Code Online (Sandbox Code Playgroud)

每当我解雇POST时,我都会

"NetworkError: 405 Method Not Allowed - http://localhost:65396/api/payment/charge"
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

谢谢.

UPDATE

这是路由信息(默认)

 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 }
            );
Run Code Online (Sandbox Code Playgroud)

Ali*_*tad 11

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

你能用路由更新问题吗?


UPDATE

和我想象的一样!假设您的控制器被调用,您在发送http://localhost:65396/api/payment/charge时需要发送给http://localhost:65396/api/paymentPaymentController.

请注意,路线没有action.


Mik*_*ike 11

结果我需要实现CORS支持.http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx

  • 这篇文章似乎更新了...... http://www.stevefenton.co.uk/Content/Blog/Date/201211/Blog/Using-CORS-With-ASP-NET-Web-API/ (5认同)