Come limitare OData risulta in una WebAPI

Attualmente sto sviluppando un’applicazione che utilizza una WebAPI per restituire i dati che sono memorizzati in un database.

Ora, ho bisogno di essere in grado di filtrare i risultati, quindi OData alla richiesta, in questo modo posso creare un intero filtro in un Queystring.

Ecco la configurazione di OData:

private static void ConfigureOData(HttpConfiguration config) { ODataModelBuilder builder = new ODataConventionModelBuilder(); builder.EntitySet("GenericArticle"); config.MapODataServiceRoute(routeName: "ODataRoute", routePrefix: "OData", model: builder.GetEdmModel()); // Defines the configuration for OData. var queryAttribute = new QueryableAttribute { MaxTop = Convert.ToInt32(ConfigurationManager.AppSettings["OData:MaxTop"]), PageSize = 2 }; config.EnableQuerySupport(queryAttribute); } 

Questo metodo viene chiamato dal file WebApiConfig.cs .

Il file Global.asax contiene il seguente codice:

 protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); GlobalConfiguration.Configuration.EnsureInitialized(); UpdateDatabaseToLatestVersion(); } 

Il controller che utilizzo per interrogare i dati è il seguente:

  [EnableQuery] public IQueryable Get() { var data = UnitOfWork.GenericArticlesRepository.Entities; return data; } 

Pertanto, il metodo è contrassegnato con l’attributo EnableQuery e il controller eredita anche da ODataController .

Ora, ci sono alcune tabelle che posso interrogare che contengono milioni di record e, naturalmente, non voglio nemmeno che una GetAll trovi il modo per raggiungere il database.

Pertanto, ho pensato che nel file WebApiConfig fosse sufficiente il seguente codice:

 var queryAttribute = new QueryableAttribute { MaxTop = Convert.ToInt32(ConfigurationManager.AppSettings["OData:MaxTop"]), PageSize = 2 }; 

Tuttavia, ciò non limita i risultati, ma genera un errore quando richiedo l’url con un filtro Take che è maggiore del valore MaxTop definito qui.

C’è un modo per garantire che, anche se richiedo l’url senza parametri di filtro, che il risultato contenga solo i primi record “x” con il paging abilitato?

Cordiali saluti,

Si prega di provare l’opzione di paging del server per filtrare i record nel caso in cui si desidera limitare il numero di record di recupero.

Controlla questo link – http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options#server-paging

Happy Coding 🙂