我有一个类的构造函数如下
public SomeClass
{
List<string> MyList;
public SomeClass()
{
this.MyList = new List<string>() { "1","2","3" };
}
}
我的ajax帖子如下:
{MyList:["a","b","c"]}
在我的 Controller 中
public void Post([FromBody]Models.SomeClass example)
{
Debug.WriteLine(example.MyList);
}
输出是:
["1","2","3","a","b","c"]
我预计:
["a","b","c"]
我期望的是发布的内容,而不是附加了发布值的初始值。不确定这里发生了什么,为什么列表的初始状态没有被覆盖?
最佳答案
几个月前我遇到了同样的行为。我得出的结论是,当 WebAPI 服务收到带有一些数据的 POST 请求时,它将:
- 调用类型构造器实例化一个新的C#对象对应POST请求。
- 将 POST 请求中的数据添加(而不是覆盖)到这个新对象的列表中。
我知道,您可能可以从结果中推断出这一点,并且您很好地说明了这一点。
但我最终做的是将类型构造函数中的任何初始值设置移到工厂中,以应对我需要设置这些“默认”值的情况。然后,当 new()
作为 POST 的一部分被调用时,它返回一个空列表,因此从 POST 添加的值是唯一最终出现在对象中的值。
关于c# - 附加而不是覆盖 Web API 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31035950/