没有MediaTypeFormatter可用于读取“InventoryItem”类型的对象

时间:2012-06-24 19:55:06

标签: c# asp.net-mvc asp.net-web-api

AJAX致电

$.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)/请求有效负载

{"Id":0,"Upc":"3456789012","Quantity":"200","Category":"Vodka","TransactionType":"Audit","MetaData":"ABSOLUT 750ml"} 

响应错误

  

没有MediaTypeFormatter可用于读取类型的对象   来自媒体类型“未定义”的内容的“InventoryItem”。“

路由POST方法

public HttpResponseMessage PostItem(InventoryItem item)

JSON字符串中的所有属性都存在于InventoryItem模型中。

关于复杂类型的 similar question 建议从Beta升级到RC以修复模型绑定更改,我已经完成了。

如果问题不明显,我该如何纠正此错误?如果我将[FromUri]属性添加到R​​outed POST方法,那么AJAX调用将正确路由,但空InventoryItem。如果您需要任何其他信息,请告诉我。

1 个答案:

答案 0 :(得分:19)

contentType: 'application/json, charset=utf-8',

应该是:

contentType: 'application/json; charset=utf-8',

请注意;而不是,的使用,Post是内容类型和字符集之间的正确分隔符。此外,如果您遵循标准的RESTful约定,您的控制器操作应该被调用PostItem而不是public HttpResponseMessage Post(InventoryItem item) { ... } ,如您所示:

{{1}}