Saule

JSON API for ASP.NET

View on Github

Adding pagination

Adding pagination to an action method’s results is as easy as adding an attribute:

public class PeopleController : ApiController
{
    [Paginate(PerPage = 25, PageSizeLimit = 100)]
    [ReturnsResource(typeof(PersonResource))]
    public IQueryable<Person> Get()
    {
        return People.FindAll()
    }
}

This will generate next, prev and first links in your responses, and interpret the page[number] and page[size] query parameter when appropriate.

Saule will use LINQ to query the IQueryable<T> you return, so pagination is not done in memory. If you return an IEnumerable<T>, the query is executed in memory instead. Note that Saule does not support the non-generic versions of IQueryable and IEnumerable.