AJAX вызоваНет MediaTypeFormatter доступен для чтения объект типа 'InventoryItem'
$.ajax({
url: '/api/Inventory',
cache: false,
type: 'POST',
data: json,
contentType: 'application/json, charset=utf-8',
statusCode: {
201: function (data) {
console.log(data);
viewModel.items.push(data);
}
}
});
Отправленные данные (json
)/Запрос Payload
{"Id":0,"Upc":"3456789012","Quantity":"200","Category":"Vodka","TransactionType":"Audit","MetaData":"ABSOLUT 750ml"}
Ошибка Ответ
Нет MediaTypeFormatter доступен для чтения объекта типа «InventoryItem» от содержания с типом носителя «» не определено «».»Метод
маршрутизацией ПОСТ
public HttpResponseMessage PostItem(InventoryItem item)
Все свойства в строке JSON присутствуют в InventoryItem
модели.
A similar question В отношении сложных типов предлагается модернизация с Beta на RC, чтобы исправить изменение привязки модели, которое я сделал.
Если вопрос не очевиден, как исправить эту ошибку? Если я добавлю атрибут [FromUri] к методу Routed POST, тогда вызов AJAX будет маршрутизирован правильно, но с пустым InventoryItem
. Если вам нужна какая-либо другая информация, пожалуйста, дайте мне знать.
Ну, я после [учебник] (http://www.asp.net/web- api/raw-content/tutorials/create-a-web-api-that-support-crud-operations), а их действие «POST» было «PostProduct». Тем не менее, полуколока сделала это! Большое спасибо. – Josh
Это не стандартное соглашение, используемое путями ASP.NET MVC 4 RC при создании нового проекта. Они используют 'api/{controller}/{id}'. Поскольку вы видите, что имя действия не является частью URL-адреса, это означает, что правильное действие выбрано базой на HTTP-глаголе, используемом для выполнения запроса. Но в любом случае это не связано с вашей проблемой. Ваша проблема связана с передачей неправильного значения для HTTP-заголовка Content-Type. –
Итак, вы обычно не должны добавлять ничего к имени действия, кроме своего типа запроса? Например, 'Post' или' Delete' в отличие от 'PostItem' или' DeleteItem'? – Josh