将多个对象发布到Web API

时间:2016-02-16 10:30:55

标签: c# json asp.net-mvc asp.net-web-api

我正在尝试使用JSON对象将数据传递到我的Web API。发送单个对象确实可以正常工作但是只要我放第二个参数,第二个对象似乎甚至没有在服务器端初始化?

请查看以下代码,了解我如何处理数据参数

[HttpPost("")]
public JsonResult Post([FromBody]Log_Header headerData, 
                       [FromBody]Log_Detail detailData)
{
    return Json("Test");
}

上面的每个类都有简单的字符串数据,例如下面的类:

public class Log_Header
{
    public int Id { get; set; }
    public string Name{ get; set; }
}

正在发送的数据示例:

var header = {
    Id: 0,
    Name: "Test 3",
}

var detail = {
    Id: 0,
    Desc: "Test 1",
}

$http({
    method: 'POST',
    url: "api/addLog",
    data : { 
        header: header,
        detail: detail
    }
})

这只是演示数据。

我尝试过几种不同的方式发送数据,例如:

 var data = {
     Id: 0,
     Name: "Test 3",
     LogID: 0,
     Desc: "Test",
 }

但似乎没有任何结果可以解决这个问题,我猜测我正在错误地设置网络API?

总的来说,问题是[FromBody]Release_Log_Detail detailData根本没有收到任何数据,当从断点查看对象时,它显示为null

如果有任何想法请在下面发表评论或回答。如果您需要我的任何信息,请询问。

2 个答案:

答案 0 :(得分:3)

无论我们从angular $ http发布什么,它都会考虑单个对象,所以我们需要在服务器上的单个对象中读取它

我们可以这样做

[HttpPost("")]
public JsonResult Post([FromBody]PostData data)
{
    return Json("Test");
}

class PostData
{
   public Log_Header LogHeader { get; set; }
   public Log_Detail LogDetail { get; set; }

}

角柱

$http({
   method: 'POST',
   url: "api/addLog",
   data : { 
      LogHeader : header,
      LogDetail : detail
  }
})

答案 1 :(得分:-1)

在javascript中

class IndexForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(IndexForm, self).__init__(*args, **kwargs)
        self.fields['year'].widget.attrs.update({"class": "form-control tosp"})
        self.fields['index'].widget.attrs.update({"class": "form-control tosp"})

class IndexUpdateView(UpdateView):
    fields = '__all__'
    model = Index
    form_class = IndexForm
    template_name = 'index_form.html'

    def get_success_url(self):
        return reverse('IndexList')

创建模型

$http({
    method: 'POST',
    url: "api/addLog",
    data : JSON.stringify({ 
            header: header, 
            detail: detail
        })
})

您已创建名称为public class dataViewModel { public string[] header{ get; set; } public string[] detail{ get; set; } } 且操作名称为api

的控制器
addLog

希望这会有所帮助