Как вы обслуживаете запросы AND и OR в строке запроса WebApi? - PullRequest
3 голосов
/ 26 марта 2019

Как обрабатывать запросы AND и OR в строке запроса WebApi, используя Get in C #?

Например, для таких поисков, как firstName=John OR firstName=Simon AND Country=UK OR Country=Canada OR LastName=Jones Or Age>=65

1 Ответ

0 голосов
/ 27 марта 2019

Если вы хотите «правильно» поддерживать такие запросы, лучше всего включить OData на контроллере WebAPI2.

Документация OData в ASP.NET Web API содержит всю информацию, необходимую для настройки OData V4 (также V3) в вашем проекте WebAPI, а также примеры того, как реализовать ваши действия контроллеров ( Поддержка параметров запроса OData в ASP.NET Web API 2 с)

Из приведенной выше ссылки мы видим следующий фрагмент кода:

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

Как выглядит реализация Get () при использовании Entity Framework?

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

А как будет выглядеть строка запроса для запроса этой конечной точки WebAPI?

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

Это так же просто, как указано выше, потому что стек ODNet .Net будет анализировать из коробки $ filter (и любой другой элемент строки запроса, поддерживаемый спецификацией OData) и применять запрос (и другие) к IQueryable. объект сам по себе

Если вы не используете EF или какую-либо другую систему, предоставляющую доступ к IQueryable, вы можете перехватить это готовое поведение и получить полный контроль над тем, как происходит такой анализ, чтобы адаптировать выполнение к вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...