向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
有没有人碰到这个,有什么方法可以选择明确这些请求吗?
答案 0 :(得分:1)
我相信你必须实际发送一个json字符串(你的json
变量是一个javascript对象,而不是一个json字符串):
$.ajax({
//...
data: JSON.stringify(json)
})