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

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

你能用你的路由更新问题吗?


更新

和我想象的一样!您正在发送到,http://localhost:65396/api/payment/charge而您需要发送到http://localhost:65396/api/payment- 假设您的控制器被调用PaymentController

请注意,路线没有action.

于 2012-06-06T15:29:45.533 回答
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 回答
1

我的控制器也有同样的问题。唯一不同的是 URL 的结尾。最后将“/”添加到“ http://localhost:65396/api/payment/charge ”,这对我有帮助

于 2015-06-09T13:31:23.663 回答