J'ai un Web Service effectuée à l'aide de la WebAPI fournis par l'ASP .NET MVC 4.
Je sais que le couche sur le dessus de qui WebAPI œuvres gère automatiquement OData Requêtes (comme $filter
, $top
, $skip
), mais que si je veux gérer le filtrage par moi-même?
Je n'ai pas simplement renvoyer des données de ma base de données, mais j'ai une autre couche qui ajoute certaines propriétés, en fait les conversions etc. Donc, l'interrogation de l'ENSEMBLE de mes données, de les convertir et de les retourner à la WebAPI classe pour OData le filtrage n'est pas juste assez bon. Bien sûr, c'est terriblement lent, et généralement une idée de merde.
Donc, il y a un moyen de propager la requête OData paramètres de mon WebAPI point d'entrée pour les fonctions que j'appelle pour obtenir et convertir les données?
Par exemple, vous rendre à /api/people?$skip=10&$top=10
pourrait appeler sur le serveur:
public IQueryable<Person> get() {
return PersonService.get(SomethingAboutCurrentRequest.CurrentOData);
}
Et dans 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;
}