具有空安全性的Web API空列表

时间:2015-02-02 17:55:05

标签: c# .net angularjs asp.net-web-api

我有一个角度控制器,可以发布Web API方法。我试图在ienumerable上添加null安全性,但是当我这样做时,导致ienumerable总是为空。

角度呼叫

$http.post(customer/DoSomething, {names: ["chris", "joe"]})

方法

string DoSomething(Customer customer){...}

模型

// populates IEnumerable
public class Customer
{
    public IEnumerable<string> Names {get; set;}

}

// what I want to do but IEnumerable is always empty
public class Customer
{

    private IEnumerable<string> _names;
    public IEnumerable<string> Names 
    {
         get 
         {
             return _names ?? new List<string>();
         }
         set
         {
            _names = value;
         }
    }

}

2 个答案:

答案 0 :(得分:7)

您可以添加一个构建器来初始化您的集合。

// populates IEnumerable
public class Customer
{
    public Customer()
    {
      this.Names = new List<string>();
    }

    public IEnumerable<string> Names {get; set;}

}

这将确保您的Names集合不为空。

修改

现在已经使用C#自动属性

进行了简化
// populates IEnumerable
public class Customer
{
    public IEnumerable<string> Names {get; set;} = new List<string>();    
}

答案 1 :(得分:1)

Sameer的回答是最好的做法。

只是指出初始代码的问题,它始终返回List的新实例,因为您从未设置字段值。

public IEnumerable<string> Names 
{
     get 
     {
         if(_names == null)
              _names = new List<string>();

         return _names;
     }
     set
     {
        _names = value;
     }
}