我正在开发angularJS应用程序,我正在进行调用以向API控制器发送数据。除了数据数组之外,所有内容都被发送到控制器。
以下是进行控制器调用的代码
this.UpdateJobWithDeadlines = function (JobData) {
var request = $http({
method: "POST",
url: "/api/JobAPI/UpdateJobWithDeadlines",
data: JSON.stringify(JobData)
});
return request;
}
我检查了JobData对象,它的值(缩进以便于阅读)是:
{
"jobNum":null,
"jobName":"fgfg",
/* snip */
"StatusDatas":[
{
"scId":0,
"JobNum":9746.030148450296,
"StatusComment":"03-03-2017 : 1",
"scTimeStamp":"2017-03-03T15:47:48.174Z",
"IsNew":0
},
{
"scId":0,
"JobNum":8527.946898255957,
"StatusComment":"03-03-2017 : 3",
"scTimeStamp":"2017-03-03T15:47:49.459Z",
"IsNew":0
}
],
/* SNIP */
"telephone":"9"
}
控制器方法签名如下:
public int UpdateJobWithDeadlines(JobDataWithDeadlines JobData)
JobDataWithDeadlines
课程如下:
public class JobDataWithDeadlines
{
public int? jobNum;
public string jobName;
/* snip */
public List<StatusData> StatusDatas;
}
public class StatusData
{
public int scId;
public int JobNum;
public string StatusComment;
public string scTimeStamp;
public bool IsNew;
}
但是我得到一个控制器方法参数的StatusDatas
属性的空列表。
答案 0 :(得分:1)
您必须将以下属性添加到传递给$http
方法的对象:
this.UpdateJobWithDeadlines = function (JobData) {
var request = $http({
method: "POST",
contentType: "application/json",
dataType: "json",
url: "/api/JobAPI/UpdateJobWithDeadlines",
data: JSON.stringify(JobData)
});
return request;
}
您可以选择为内容类型指定一个字符集,即:
contentType: 'application/json; charset=utf-8'
有些人还建议添加traditional: true
,但根据我的经验,并不总是导致此问题的原因。
答案 1 :(得分:1)
问题在于您的字段,它们都需要是属性。 json.net
的反序列化和序列化不会绑定到字段(开箱即用,可以使用其他配置/自定义映射代码)。
public class JobDataWithDeadlines
{
public int? jobNum {get;set;}
public string jobName {get;set;}
/* snip */
public List<StatusData> StatusDatas {get;set;}
}
public class StatusData
{
public int scId {get;set;}
public double JobNum {get;set;}
public string StatusComment {get;set;}
public string scTimeStamp {get;set;}
public bool IsNew {get;set;}
}
此外,您应该在请求的http标头中指定content-type
。在这种情况下,请将其设置为application/json