Pregunta

He estado jugando con la muestra de BigShelf (aplicación de una sola página).Me pareció realmente interesante el método GetBooksForSearch (/ api / BigShelf / GetBooksForSearch) que requiere $filter, $inlinecount, $top, $skip parámetros para paginar y filtrar resultados, que no están presentes en el código del controlador:

public IQueryable<Book> GetBooksForSearch
    (string profileIds, Sort sort, bool sortAscending)

No pude encontrar ningún documento sobre cómo ese controlador traduce y filtra el resultado después y, lo que es más importante, cómo configurar dicho comportamiento (por ejemplo, limitar el resultado máximo), ¿alguien tiene una pista?

- Actualizado -

Descubrí que MVC Web API está haciendo el truco.Pero, ¿cómo podemos configurarlo?

¿Fue útil?

Solución

Hay un atributo de filtro de acción llamado ResultLimitAttribute que puede utilizar en cualquier método de acción que devuelva IQueryable<T> o incluso IEnumerable<T> para limitar la cantidad de datos devueltos.

[ResultLimit(100)]
public IQueryable<Product> Get() {
    // ...
}

Otros consejos

Parece que se ha eliminado ResultLimitAttribute. Vea esta confirmación

Se incorporó a una función del atributo [Queryable] que ahora es necesario para el soporte de OData. Vea la discusión aquí

El uso adecuado ahora sería

[Queryable(ResultLimit = 10)]

< went[UPDATE]

A partir de RTM, se ha eliminado la función ResultLimit de Queryable. Además, [Queryable] se ha movido a su propio paquete de vista previa. Consulte esta publicación de blog para obtener más información y esta publicación para obtener instrucciones sobre el nuevo uso.

[ACTUALIZACIÓN 2 16/11/12] Con la Vista previa de actualización de otoño de 2012 de ASP.Net, las cosas se han actualizado nuevamente. La propiedad ResultLimit del atributo [Queryable] se ha agregado nuevamente al paquete OData.

Consulte el artículo aquí para ver algunos de los cambios.

Aquí está el paquete Nuget actualizado. En el momento de escribir estas líneas, es un paquete de VISTA PREVIA.

Hay un breve webcast sobre paginación y consultas con MVC Web API que puede ver aquí

Explica cómo puede realizar la paginación mediante

  • utilizando la sintaxis de consulta OData, en cuyo caso la API web interpreta y recupera automáticamente los resultados,
  • o escribiendo su propio método que toma como parámetros el pageIndex y pageSize, y luego devuelve el número solicitado de elementos.

AFAIK, no puede configurar el número máximo de elementos devueltos utilizando el primer método, pero puede limitar el número de elementos devueltos utilizando el segundo enfoque y simplemente verificando if (pageSize>maxPage) then return maxPage items.

Como señaló Cody Clark, esta área ha experimentado una gran cantidad de cambios a lo largo del tiempo.A partir de la versión 5.2 de WebAPI, ahora usa EnableQueryAnnotation y usa el parámetro PageSize en lugar de QueryableAttribute o ResultLimit.([Queryable] seguirá funcionando, pero está marcado como obsoleto). Actualmente, usaría la siguiente sintaxis:

[EnableQuery(PageSize = 20, MaxTop = 20)]
public IQueryable<Product> Get() {
    // ...
}

Al utilizar PageSize, establece el tamaño de página predeterminado para las solicitudes sin parámetros.Si no incluye el valor MaxTop, un cliente deshonesto podría establecer la parte superior en un valor muy alto y omitir los valores predeterminados de la página.Con MaxTop, lanzará una excepción si el cliente solicita más registros de los que admite su API.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top