数组数据未发送到API控制器c#

时间:2017-03-03 15:57:16

标签: c# angularjs

我正在开发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属性的空列表。

2 个答案:

答案 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