web-dev-qa-db-ja.com

Ajax Post: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 }
            );
15
Mike
11
Mike

ほとんどの場合、ルーティングはアクションが呼び出されるように構成されていません。したがって、要求はどこにも到達せず、ASP.NET Web APIは「メソッドは許可されていません」という空白のメッセージを送信します。

ルーティングで質問を更新してください。


更新

やっぱり! http://localhost:65396/api/payment/chargeに送信する必要があるときに、http://localhost:65396/api/paymentに送信しています-コントローラーがPaymentControllerと呼ばれていると仮定します。

ルートにはactionがないことに注意してください。

11
Aliostad

コントローラーにも同じ問題がありました。異なるのはURLの終わりだけです。最後に「/」を「 (http:// localhost:65396/api/payment/charge 」に追加してください。

1
Pavel Jounda