【问题标题】:Post a collection to ASP.NET WEB API将集合发布到 ASP.NET WEB API
【发布时间】:2015-10-13 02:53:30
【问题描述】:

我应该如何将对象集合发布到 WEB API Rest 服务?

这就是我在休息服务中所拥有的......

我正在使用 XmlSerializer

这里是ActionMethod

public class DevicesController : ApiController
{
[HttpPost]
public void PushToDb([FromBody] device[] devices)
{
    var iCount = devices.Count();
    ...
    ...
}

这里是设备 DTO:

public class device
{
    public string serialnumber { get; set; }
    public string hw_part_id { get; set; }
}

这是请求:

http://localhost:50384/api/Devices/PushToDb

还有 XML 输入

<devices>    
    <device        
        <serialnumber>1</serialnumber>        
        <hw_part_id>A</hw_part_id>    
    </device>    
    <device>        
        <serialnumber>2</serialnumber>        
        <hw_part_id>A</hw_part_id>    
    </device>
</devices>

Content-Type 设置为 application/xml。

当我发送这个 Post 请求时,devices 始终为空。但是,如果我将 Action 方法更改为只接受一个设备,我就可以在 Action 方法中接收设备数据。 只有当我传递一个集合时,我才能接收到 Action 方法中的输入。 我错过了什么吗?我应该怎么做才能将集合(XML 输入)发布到 ASP.NET Rest 服务?

提前致谢。

抹布

【问题讨论】:

  • 通过代码发布?您可以使用 WebClient。
  • 将 DataContract 和 DataMember 属性添加到您的 DTO
  • 只是检查,""
  • 您好,设备已正确关闭。我只是在问题中错过了它。我将 DataContract 和 DataMember 添加到 DTO,但仍然无法正常工作。

标签: c# asp.net rest asp.net-web-api collections


【解决方案1】:

正如评论中所说,以这种方式装饰你的班级

[DataContract]
public class device
{
    [DataMember]
    public string serialnumber { get; set; }
    [DataMember]
    public string hw_part_id { get; set; }
}

然后使用newtonsoft(或任何其他库)将device类型的数组序列化为json。并以这种方式使用System.Net.WebClient

 using (WebClient client = new WebClient())
 {
     client.Headers[HttpRequestHeader.ContentType] = "application/json";
     var jsonObj = JsonConvert.SerializeObject(yourArray); //yourArray is a device[]
     client.UploadString(ApiServiceUrl, jsonObj);

 }

【讨论】:

  • [DataContract] & [DataMember] 属性是多余的。没有?
  • 他在请求 XML,类似。
  • 对不起。我添加了 DataContract 和 DataMember,但我仍然在 action 方法中得到 null。
【解决方案2】:

亲爱的,下班休息一下,看看这个MVA课程,一定能解决你的问题

https://www.microsoftvirtualacademy.com/en-us/training-courses/web-api-design-jump-start-8689?l=BMxSvaH1_3804984382

谢谢你

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 2014-02-16
    • 2018-02-28
    • 2013-05-30
    相关资源
    最近更新 更多