Csharp/C#教程:将嵌套集合发布到Web API分享


将嵌套集合发布到Web API

我正在尝试将复杂类型的对象发布到web api。 在web api端,当方法接收到object参数时,除了从ICollection派生的集合之外,每个属性都被正确设置。

这是我的示例类:

public class MyClass { private int id; public int Id { get { return id; } set { id = value; } } private MyCollection collection; public MyCollection Collection { get { return collection; } set { collection = value; } } } public class MyCollection : ICollection { public System.Collections.Generic.List list; public MyCollection() { list = new List(); } public void Add(T item) { list.Add(item); } public void Clear() { list.Clear(); } public bool Contains(T item) { return list.Contains(item); } public void CopyTo(T[] array, int arrayIndex) { list.CopyTo(array, arrayIndex); } public int Count { get { return list.Count; } } public bool IsReadOnly { get { return false; } } public bool Remove(T item) { list.Remove(item); return true; } public IEnumerator GetEnumerator() { return list.GetEnumerator(); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return list.GetEnumerator(); } } 

这是我的api控制器:

 public class ValuesController : ApiController { // GET api/values public IEnumerable Get() { return new string[] { "value1", "value2" }; } // GET api/values/5 public string Get(int id) { return "value"; } // POST api/values public string Post([FromBody]MyClass value) { return "The object has " + value.Collection.Count + " collection item(s)."; } // PUT api/values/5 public void Put(int id, [FromBody]string value) { } // DELETE api/values/5 public void Delete(int id) { } } 

这是我在客户端的测试方法:

  function Test() { var obj = { 'Id': '15', 'Collection': [{ '': 'item1' }, { '': 'item2' }] }; $.post(serviceUrl, obj) .done(function (data) { alert(data); }); 

在Web Api post方法Id变为15但Collection的长度为0。

但是当我从MyCollection将集合类型更改为ICollection时。 collections的长度是2。

当我使用MyCollection时,为什么我会收集零长度? 它实施错了吗? 我怎样才能使它工作?

我认为你需要创建一个这样的模型绑定器:

 Post([ModelBinder(typeof(MyClassModelBinder))] MyClass myClass) 

怎么做请阅读以下文章: aspnet web api中的参数绑定

上述就是C#学习教程:将嵌套集合发布到Web API分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/942002.html

(0)
上一篇 2021年11月12日
下一篇 2021年11月12日

精彩推荐