Jquery 使用显式内容类型会导致WebAPI序列化失败
向WebApi发出PUT或POST命令时,使用显式内容类型会导致WebApi序列化失败。例如,以下ajax调用将失败: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(),
$("#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)
})