【发布时间】:2012-06-02 14:58:04
【问题描述】:
我有一个使用 ASP .NET MVC 4 提供的 WebAPI 制作的 Web 服务。
我知道 WebAPI 工作的层会自动处理OData Queries(例如$filter、$top、$skip),但是如果我想自己处理过滤呢?
I don't simply return data from my database,但我还有另一层,它添加了一些属性、进行一些转换等。因此,查询我的所有数据、转换它们并将它们返回到 WebAPI 类以进行 OData 过滤还不够好。这当然非常慢,而且通常是一个糟糕的想法。
那么有没有办法将 OData 查询参数从我的 WebAPI 入口点传播到我调用的函数以获取和转换数据?
例如,对/api/people?$skip=10&$top=10 的 GET 将调用服务器:
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;
}
【问题讨论】:
标签: rest odata asp.net-mvc-4 asp.net-web-api