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

Jquery 使用显式内容类型会导致WebAPI序列化失败,jquery,.net,ajax,json,asp.net-web-api,Jquery,.net,Ajax,Json,Asp.net Web Api,向WebApi发出PUT或POST命令时,使用显式内容类型会导致WebApi序列化失败。例如,以下ajax调用将失败: $("#updateStudent").click(function (event) { event.preventDefault(); var json = { "firstName": $("#firstName").val(),

向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


有人遇到过这种情况吗?我可以选择什么方式来明确这些请求吗?

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

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