您如何在WebApi查询字符串中满足AND和OR搜索?

时间:2019-03-26 15:03:54

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

如何使用Get in C#满足WebApi查询字符串中的AND和OR搜索?

例如,对于诸如firstName=John OR firstName=Simon AND Country=UK OR Country=Canada OR LastName=Jones Or Age>=65

的搜索

1 个答案:

答案 0 :(得分:0)

如果您想“适当地”支持这种查询,则最好的措施是在WebAPI2 Controller上启用OData。

OData in ASP.NET Web API文档提供了在WebAPI项目中配置OData V4(以及V3)所需的所有信息,并提供了有关如何实施控制器操作(Supporting OData Query Options in ASP.NET Web API 2)的示例

从上面的链接中,我们可以看到下一个代码片段:

public class ProductsController : ApiController
{
    [Queryable]
    IQueryable<Product> Get() {}
}

使用实体框架时,Get()实现的外观如何?

 public class ProductsController : ApiController
 {
    [Queryable]
    IQueryable<Product> Get() {
       var ef = new myDbContext(); 
       return ef.Products; // <-- DbSet<Product>
    }
 }

以及查询字符串如何查询此WebAPI EndPoint?

https://[domain]/api/v1/Products?$filter=firstName eq 'john' or firstName eq 'Simon' and country eq 'UK'

与上面的操作一样简单,因为.Net OData堆栈将立即对$ filter(以及OData规范支持的任何其他querystring元素)进行解析,并将查询(以及其他查询)应用于IQueryable物体本身

如果您不使用EF或任何其他提供对IQueryable的访问的系统,则可以拦截这种开箱即用的行为,并完全控制如何进行这种解析以使执行适应您的需求。 / p>