Ответ 1
Оказывается, мне нужно реализовать поддержку CORS. http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx
В моем контроллере 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 }
);
Оказывается, мне нужно реализовать поддержку CORS. http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx
Скорее всего, ваша маршрутизация не настроена для действия, которое нужно вызвать. Следовательно, запрос заканчивается в никуда, и ASP.NET Web API отправляет пустое сообщение "метод не разрешен".
Можете ли вы обновить вопрос своей маршрутизацией?
Как я думал! Вы отправляете на http://localhost:65396/api/payment/charge
, пока вам нужно отправить сообщение http://localhost:65396/api/payment
- при условии, что ваш контроллер называется PaymentController
.
Обратите внимание, что маршрут не имеет action
.
У меня была такая же проблема с моим контроллером. Единственное отличие - это конец URL-адреса. Добавьте "/" в " http://localhost:65396/api/payment/charge" в конце, что помогло мне