【问题标题】:Post multiple objects to web API [duplicate]将多个对象发布到 Web API [重复]
【发布时间】:2016-05-27 14:00:37
【问题描述】:

我正在尝试使用 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

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

【问题讨论】:

  • 您仍在发布一个对象,现在它有两个属性也是对象。创建一个具有两个属性的 c# 对象,称为正确类型的 header 和 detail,并将其作为 Post 的输入。
  • @Mant101 我尝试了很多方法(正如我对许多人所说的在这个问题中发布的方法)。你说的好像也没用。
  • @Lankymart 您发布的第一个似乎回答了我的问题。这可以作为那个人的欺骗而关闭。感谢您为我找到帖子,我自己一定错过了。

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


【解决方案1】:

无论我们从 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
  }
})

【讨论】:

  • 感谢您的回复桑杰!我似乎使用这种方法让data 显示为null。您将如何发送数据(通过 Json)?
  • 不幸的是,PostData 对象仍然从$http post 中获取null
  • 哦!请让我知道,如果它没有解决。今晚我会重现并解决。谢谢
  • @furkick 问题解决了吗?如果问题解决,分享代码
  • @Ravi 抱歉,不,我最终创建了一个类来保存这两种对象类型并传回一个包含两种对象类型的单个对象,API 似乎只接受这一点。
【解决方案2】:

在javascript中

$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 的控制器

[HttpPost]
public JsonResult addLog(dataViewModel data)
{
    return Json("Test");
}

希望对你有帮助

【讨论】:

  • 你的问题解决了吗
  • 抱歉,我使用的是对象而不是字符串。
  • 查看我的新代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
相关资源
最近更新 更多