使用显式内容类型会导致Web API序列化失败

时间:2014-03-25 19:52:33

标签: jquery .net ajax json asp.net-web-api

向WebApi发出PUT或POST命令时,使用显式内容类型会导致WebAPI序列化失败。例如,以下ajax调用将失败:

$("#updateStudent").click(function (event) {
                event.preventDefault();

                var json = {
                    "firstName": $("#firstName").val(),
                    "middleInitial": $("#middleInitial").val(),
                    "lastName": $("#lastName").val(),
                    "birthDate": $("#birthDate").val(),
                    "gender": $("#gender").val()
                };

                $.ajax({
                    url: "api/students/1",
                    type: "PUT",
                    accept: "application/json",
                    contentType: "application/json",
                    data: json
                }
                ).done(function (data) {
                    bindStudentDetail(data);
                });
            });

我可以通过从ajax选项参数中删除contentType来解决问题,但我非常有兴趣知道为什么会发生这种情况。我已经做了一点挖掘,看起来json我编码正在被转换回这样的表格编码格式:

firstName=Carlos&middleInitial=R&lastName=Alexander&birthDate=10%2F7%2F1985&gender=Male

有没有人碰到这个,有什么方法可以选择明确这些请求吗?

1 个答案:

答案 0 :(得分:1)

我相信你必须实际发送一个json字符串(你的json变量是一个javascript对象,而不是一个json字符串):

$.ajax({
    //...
    data: JSON.stringify(json)
})