我有一个使用 ASP .NET MVC 4 提供的WebAPI制作的 Web 服务。我知道 WebAPI 工作的层会自动处理OData 查询(例如$filter
、$top
、$skip
),但是如果我想自己处理过滤呢? ?
我不只是从我的数据库中返回数据,而且我还有另一个层,它添加了一些属性、进行一些转换等。所以查询我的所有数据、转换它们并将它们返回到 WebAPI 类以进行 OData 过滤不仅仅是好的足够。这当然非常慢,而且通常是一个糟糕的想法。
那么有没有办法将 OData 查询参数从我的 WebAPI 入口点传播到我调用以获取和转换数据的函数?
例如,一个 GET/api/people?$skip=10&$top=10
将在服务器上调用:
public IQueryable<Person> get() {
return PersonService.get(SomethingAboutCurrentRequest.CurrentOData);
}
并在PersonService
:
public IQueryable<Person> getPeople(var ODataQueries) {
IQueryable<ServerSidePerson> serverPeople = from p in dbContext.ServerSidePerson select p;
// Make the OData queries
// Skip
serverPeople = serverPeople.Skip(ODataQueries.Skip);
// Take
serverPeople = serverPeople.Take(ODataQueries.Take);
// And so on
// ...
// Then, convert them
IQueryable<Person> people = Converter.convertPersonList(serverPeople);
return people;
}