ASP.NET Web Api中可搜索的GET端点的最佳实现

时间:2015-11-26 12:05:02

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

我有一个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(); }

这样改进我的列表直到返回它。但我想知道如果我的数据模型发生变化/我希望能够搜索更多字段,是否有更简单的方法更加健壮。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果您有很多类似的API方法,可以查看OData。另一个变体尝试用于此目的Dynamic Linq具有自定义过滤器格式。否则我的建议是必须包含查询字段(搜索字段)的创建类,例如:notes,id等,然后将此对象传递给API并使用这些搜索字段和PredicateBuilder过滤您的集合。同样很好地解释PredicateBuilder如何运作。