Ho un servizio Web realizzata con la WebAPI fornite da ASP .NET MVC 4. So che lo strato in cima alla quale WebAPI funziona automaticamente gestisce OData query (come $filter
, $top
, $skip
), ma cosa succede se voglio gestire il filtro da solo?ASP .NET MVC 4 WebAPI: gestire manualmente OData interroga
I don't simply return data from my database, ma ho un altro livello che aggiunge alcune proprietà, rende alcune conversioni ecc. Quindi interrogando TUTTI i miei dati, convertendoli e restituendoli alla classe WebAPI per il filtraggio OData non è solo abbastanza buono. Ovviamente è terribilmente lento, e generalmente un'idea schifosa.
Quindi esiste un modo per propagare i parametri di query OData dal mio punto di accesso WebAPI alle funzioni che chiamo per ottenere e convertire i dati?
Ad esempio, un GET per /api/people?$skip=10&$top=10
avrebbe chiamato sul server:
public IQueryable<Person> get() {
return PersonService.get(SomethingAboutCurrentRequest.CurrentOData);
}
E in 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;
}
Questa è la risposta più completa/corretta, grazie mille, lo userò nei miei prossimi progetti. – frapontillo
Dai un'occhiata a https://github.com/Roysvork/LinqToQuerystring/, questo ti dà la possibilità di creare un IQueryable <> direttamente da una stringa di query odata grezza. –
Grazie, questo mi ha indirizzato nella giusta direzione. –