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

Jos*_*osh 8 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);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

已发送数据(json)/请求有效负载

{"Id":0,"Upc":"3456789012","Quantity":"200","Category":"Vodka","TransactionType":"Audit","MetaData":"ABSOLUT 750ml"} 
Run Code Online (Sandbox Code Playgroud)

响应错误

没有MediaTypeFormatter可用于从媒体类型为"未定义"的内容中读取"InventoryItem"类型的对象."

路由POST方法

public HttpResponseMessage PostItem(InventoryItem item)
Run Code Online (Sandbox Code Playgroud)

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

一个类似的问题就复杂类型建议从Beta升级到RC来修复模型绑定的变化,这是我做的事.

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

Dar*_*rov 19

contentType: 'application/json, charset=utf-8',
Run Code Online (Sandbox Code Playgroud)

应该:

contentType: 'application/json; charset=utf-8',
Run Code Online (Sandbox Code Playgroud)

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

public HttpResponseMessage Post(InventoryItem item)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)