Buenas.

Vamos a generar un Web Api que devuelva un conjunto de registros ya paginados. Utilizaremos una sola tabla de una BBDD porque lo importante no es de dónde obtener los datos, sino como ofrecerlos al Cliente.

Partimos de una BBDDD con una tabla que contiene 14 registros, en este caso un listado de Productos:

Tabla_PRODUCTOS

Creamos con Visual Studio un proyecto WebApi al que llamaremos WebApiPaginacion. Dentro de la carpeta Model añadimos un nuevo objeto Entity Framework llamado EntityProductos. Incluimos nuestra cadena de conexión a la base de datos y recuperamos la tabla PRODUCTOS:

EntityProductos

Como se ve, el modelo que vamos a utilzar es bastante sencillo:

 public partial class PRODUCTOS
    {
        public int PROD_ID { get; set; }
        public string PNAME { get; set; }
        public string PDESC { get; set; }
        public Nullable ALMACEN { get; set; 
    }

También nos vamos a crear una clase llamada ProductosPaginaResult que será la encargada de enviar los productos ya paginados. En esta clase es la encargada de enviar la paginación de los productos al cliente, que la podrá mostrar a conveniencia. Devolverá información sobre la página actual, el número de elementos que contiene, el número de elementos totales, las páginas totales que puede mostrar con el número de elementos seleccionados y el propio conjunto de elementos. Vamos a hacerla de forma genérica para que nos pueda servir en otras ocasiones:

    public class ProductosPaginaResult where T : class
    {
        public int PaginaActual { get; set; }

        public int ElementosPagina { get; set; }

        public int ElementosTotales { get; set; }

        public int PaginasTotales { get; set; }

        public List Productos { get; set; }
    }

Posteriormente nos creamos un ModeloProductos para generar los métodos con los que el Web Api va  a mostrar sus resultados:

    public class ModeloProductos
    {
        EntityProductos entidad;
        public ModeloProductos()
        {
            entidad = new EntityProductos();
        }

        public List GetProductos()
        {
            var productos = (from datos in entidad.PRODUCTOS
                             select datos);

            return productos.ToList();
        }

        [ResponseType(typeof(ProductosPaginaResult))]
        public ProductosPaginaResult GetProductos(int page, int rows)
        {
            var elementostotales = entidad.PRODUCTOS.Count();
            var paginastotales = (int)Math.Ceiling((double)elementostotales / rows);
            var productos = entidad.PRODUCTOS
                .OrderBy(c => c.PROD_ID)
                .Skip((page) * rows)
                .Take(rows)
                .ToList();

            var result = new ProductosPaginaResult()
            {
                ElementosPagina = rows,
                ElementosTotales = elementostotales,
                PaginasTotales = paginastotales,
                PaginaActual = page,
                Productos = productos
            };

            return result;
        }
    }

Y por último el controlador:

     public class ProductosController : ApiController
    {
        ModeloProductos modelo;
        public ProductosController()
        {
            modelo = new ModeloProductos();
        }
        public List Get()
        {
            return modelo.GetProductos();
        }

        public ProductosPaginaResult GetProdPaginacion(int page, int rows)
        {
            return modelo.GetProductos(page, rows);
        }
    }

Con el primer método obtenemos el listado total de los productos que hay en tabla:

WebApiPaginada

El segundo método obtiene un resultado global de la paginación, para que el cliente lo recoja y muestre como desee, pudiendo seleccionar tanto e número de elementos a mostrar como la página seleccionada:

WebApiTotal

Hemos creado una vista básica dentro del propio proyecto para mostrar el resultado de búsqueda. En la página principal se muestran todos los productos disponibles:

MVC_Total

Seleccionando la página a mostrar y el nº de elemento vemos el resultado:

MVC_Paginada

Podéis descargaros el código en el siguiente enlace. Para que os muestre objetos tenéis que cambiar la conexión a BBDD: WebApiPaginacion

Espero que os haya sido de ayuda. Un saludo y hasta el próximo post.

Descripción: Web Api con paginación de registros. Un ejemplo de como enviar con un Web Api una colección de objetos paginados, así como el número de páginas en las que mostrar todos. El Cliente podrá seleccionar el número de elementos a mostrar a conveniencia.

Autor: Raúl Martín Guzmán

Curso: Microsoft MCSD Web Applications + SharePoint Apps

Centro: Tajamar

Año académico: 2016-2017