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 }
);
ほとんどの場合、ルーティングはアクションが呼び出されるように構成されていません。したがって、要求はどこにも到達せず、ASP.NET Web APIは「メソッドは許可されていません」という空白のメッセージを送信します。
ルーティングで質問を更新してください。
やっぱり! http://localhost:65396/api/payment/charge
に送信する必要があるときに、http://localhost:65396/api/payment
に送信しています-コントローラーがPaymentController
と呼ばれていると仮定します。
ルートにはaction
がないことに注意してください。
コントローラーにも同じ問題がありました。異なるのはURLの終わりだけです。最後に「/」を「 (http:// localhost:65396/api/payment/charge 」に追加してください。