【问题标题】:Web API list is appended rather than overwrittenWeb API 列表被附加而不是被覆盖
【发布时间】:2015-09-11 05:02:33
【问题描述】:

我有一个类的构造函数如下

public SomeClass
{
    List<string> MyList;
    public SomeClass()
    {
        this.MyList = new List<string>() { "1","2","3" };
    }
}

我的ajax帖子如下:

{MyList:["a","b","c"]}

在我拥有的控制器中

public void Post([FromBody]Models.SomeClass example)
    {

        Debug.WriteLine(example.MyList);
    }

输出是:

["1","2","3","a","b","c"]

我预计:

["a","b","c"]

我希望准确地发布什么,而不是附加了发布值的初始值。不知道这里发生了什么,为什么列表的初始状态没有被覆盖?

【问题讨论】:

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


    【解决方案1】:

    几个月前我遇到了同样的行为。我得出的结论是,当 WebAPI 服务收到带有一些数据的 POST 请求时,它会:

    1. 调用类型构造函数来实例化一个新的 C# 对象对应 POST 请求。
    2. 将 POST 请求中的数据添加(而不是覆盖)到这个新对象的列表中。

    我知道,您可能可以从结果中推断出这一点,并且您很好地说明了这一点。

    但我最终所做的是将任何初始值设置从类型构造函数移到工厂中,以应对我需要设置这些“默认”值的情况。然后,当new() 作为 POST 的一部分被调用时,它会返回一个空列表,因此从 POST 添加的值是唯一最终出现在对象中的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-19
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多