16

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 }
            );
4

3 に答える 3

11

CORSサポートを実装する必要があることがわかりました。http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx

于 2012-06-11T13:10:27.143 に答える
11

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

ルーティングで質問を更新していただけますか?


アップデート

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

route には がないことに注意してくださいaction

于 2012-06-06T15:29:45.533 に答える