public IHttpActionResult GetTasks([FromUri] TaskResourceParameters parameters) { try { var pagedList = _taskReadRepository.ToPagedList(parameters); var previousPageLink = pagedList.HasPrevious ? CreateTaskResourceUri(parameters, ResourceUriType.PreviousPage) : null; var nextPageLink = pagedList.HasNext ? CreateTaskResourceUri(parameters, ResourceUriType.NextPage) : null; var taskDto = AutoMapper.Mapper.Map <IEnumerable <TaskDetailDto> >(pagedList); var response = Request.CreateResponse(HttpStatusCode.OK, taskDto); response.Headers.Add("X-Pagination-PageNumber", pagedList.CurrentPage.ToString()); response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(pagedList.MetaData(previousPageLink, nextPageLink))); return(ResponseMessage(response)); } catch (Exception ex) { //LOG //return StatusCode(HttpStatusCode.InternalServerError); return(InternalServerError(new Exception("An unexpected error occured! Please try again later!"))); } }
private string CreateTaskResourceUri( TaskResourceParameters parameters, ResourceUriType type) { var _urlHelper = new UrlHelper(Request); int pageAdjustment = type.GetPageAdjustment(); return(Url.Link("GetTasks", new { searchQuery = parameters.SearchQuery, name = parameters.Name, pageNumber = parameters.PageNumber + pageAdjustment, pageSize = parameters.PageSize, orderBy = parameters.OrderBy })); }
public static PagedList <Task> ToPagedList(this IReadRepository <Task> repo, TaskResourceParameters parameters) { parameters = parameters ?? new TaskResourceParameters(); var tasks = repo.List().OrderBy(t => t.Name).AsQueryable(); if (!string.IsNullOrEmpty(parameters.Name)) { tasks = tasks.Where(t => t.Name.ToLower() == parameters.Name.ToLower()); } if (!string.IsNullOrEmpty(parameters.SearchQuery)) { var searchQuery = parameters.SearchQuery.ToLower(); tasks = tasks.Where(t => t.Name.ToLower().Contains(searchQuery) || t.Description.ToLower().Contains(searchQuery)); } return(PagedList <Task> .Create(tasks, parameters.PageNumber, parameters.PageSize)); }