我有一个WebApi,它在我的数据库中公开了一个Contact字段。目前它有Post(创建),Put(编辑),Get(返回整个列表),Get(int id)(返回特定字段)的端点。
因此Get(int id)在我的数据库中搜索具有该id的联系人并以JSON形式返回它。我想实现一种方法,用户可以通过该方法向我的第一个Get函数提交条件,例如:
GET http://urlformyapi.com/api/apiContact/?querystring
查询字符串可能是例如:
firstname=phil
归还所有菲尔。
如何最好地对联系人中的所有数据字段进行完全搜索?
public int contactid { get; set; }
[Required]
public string firstname { get; set; }
[Required]
public string lastname { get; set; }
[Required]
public string email { get; set; }
[Required]
public string mobile { get; set; }
public string company { get; set; }
public string position { get; set;}
public string notes { get; set; }
public string image { get; set; }
我可以对整个列表进行初始获取,然后遍历每个查询参数,如:
//where ContactList begins as the entire list of contacts.
if(notes != null){ ContactList = ContactList.Where(x => x.notes == notes).ToList(); }
这样改进我的列表直到返回它。但我想知道如果我的数据模型发生变化/我希望能够搜索更多字段,是否有更简单的方法更加健壮。
有什么想法吗?
答案 0 :(得分:2)
如果您有很多类似的API方法,可以查看OData。另一个变体尝试用于此目的Dynamic Linq具有自定义过滤器格式。否则我的建议是必须包含查询字段(搜索字段)的创建类,例如:notes,id等,然后将此对象传递给API并使用这些搜索字段和PredicateBuilder过滤您的集合。同样很好地解释PredicateBuilder如何运作。