HTTP Post Web API仅发布数组的第一个元素

时间:2016-02-02 14:31:10

标签: asp.net arrays asp.net-web-api

我正在学习WebAPI并试图做一个HTTP Post我几乎让它工作我只是无法弄清楚如何让它发布整个数据数组。数组的计数是正确的,我没有错误它只是将数组的第一个元素发布到我的表。

我的代码如下。可能有一种更简单的方法可以做到这一点,我愿意接受任何建议或最佳实践,因为我只是在学习这一切是如何运作的。感谢关于我做错的任何提示/想法。

[System.Web.Http.HttpPost]
public void Post([FromBody]List<cert_unit_Angular> unitsPassed)
    {

        cert_unit_Angular CertUnit = new cert_unit_Angular();
        foreach (var element in unitsPassed)
        {
            CertUnit.cc_id = element.cc_id;
            CertUnit.unit_id = element.unit_id;
        }
        db.cert_unit_Angular.Add(CertUnit);
        db.SaveChanges();
     }

编辑1:发送值的客户端(似乎正在工作,因为我正在获取正在发送的元素的正确计数)。

        $.ajax({
        type: 'POST',
        traditional: true,
        url: '/api/PostToTable/Post/',
        dataType: 'json',
        data: objdata,
        contentType: 'application/json',
        success: function (result) {
            Console.Log(result);
        },
        error: function (result) {
            alert(result);
        }
    });

编辑2:获取我的数组值的客户端代码。我只是使用GET来获取数据。这对我有用,因为我获得了正确的数据量。我正在努力从中发布多行。

  function getCert(cc_id) {

    $http.get('api/Cert/Get/', { params: { id: cc_id } })
        .success(function (data) {
            $scope.selectedclients = data;

        })
}

var objdata = JSON.stringify($scope.selectedclients);

编辑3.要求XHR数据。

  

请求有效负载:

     

[{&#34; cc_id&#34;:7778,&#34; UNIT_ID&#34;:&#34; TEST10&#34;&#34; $$ hashKey&#34;:&#34;对象:5&#34;},{&#34; cc_id&#34;:7778,&#34; UNIT_ID&#34;:&#34; TEST11&#34;&#34; $$ hashKey&#34;:&# 34;对象:6&#34;},{&#34; cc_id&#34;:7778,&#34; UNIT_ID&#34;:&#34; TEST13&#34;&#34; $$ hashKey&#34; :&#34;对象:8&#34;}]

     

请求网址:http://localhost:28276/api/PostToTable/Post/

     

部首:   接受:application / json,text / javascript, / ; Q = 0.01   内容类型:应用程序/ JSON   起源:http://localhost:28276   引用者:http://localhost:28276/   User-Agent:Mozilla / 5.0(Windows NT 10.0; WOW64)AppleWebKit / 537.36(KHTML,类似Gecko)Chrome / 48.0.2564.97 Safari / 537.36   X-请求-随着:XMLHttpRequest的

(很抱歉标题格式很糟糕)

EF模型看起来像......

public partial class cert_unit_Angular
{
    public string unit_id { get; set; }
    public int cc_id { get; set; }
}

unit_id是我的主要/实体密钥。

2 个答案:

答案 0 :(得分:0)

实际上你正在保存列表中的最后一项,你的问题是你只有一个CertUnit实例,new和add需要在循环内部

 foreach (var element in unitsPassed)
        {
            cert_unit_Angular CertUnit = new cert_unit_Angular();
            CertUnit.cc_id = element.cc_id;
            CertUnit.unit_id = element.unit_id;
            db.cert_unit_Angular.Add(CertUnit);
        }

        db.SaveChanges();

答案 1 :(得分:0)

对于处理类似问题的任何人,我通过将代码更改为此来解决了我的问题...

foreach (var element in unitsPassed)
    {
        cert_unit_Angular CertUnit = new cert_unit_Angular();
        CertUnit.cc_id = element.cc_id;
        CertUnit.unit_id = element.unit_id;

        db.cert_unit_Angular.Add(CertUnit);
        db.SaveChanges();
    }

在我这样做之后,它仍然抛出错误我认为是因为unit_id是我的主键。我必须向Entity框架和DB端添加一个标识列,然后它正确地发布了我的所有行。感谢您的帮助。