public async Task <IActionResult> GetPaged(QueryViewModel parameters) { var propertyMapping = new VehiclePropertyMapping(); PaginatedList <Vehicle> pagedList; if (string.IsNullOrEmpty(parameters.SearchTerm)) { pagedList = await _vehicleRepository.GetPaginatedAsync(parameters, propertyMapping); } else { pagedList = await _vehicleRepository.GetPaginatedAsync(parameters, propertyMapping, x => x.Model.Contains(parameters.SearchTerm) || x.Owner.Contains(parameters.SearchTerm)); } var vehicleVms = Mapper.Map <IEnumerable <VehicleViewModel> >(pagedList); vehicleVms = vehicleVms.Select(CreateLinksForVehicle); Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(pagedList.PaginationBase)); var wrapper = new LinkedCollectionResourceWrapperViewModel <VehicleViewModel>(vehicleVms); return(Ok(CreateLinksForVehicle(wrapper))); }
public async Task <IActionResult> GetPaged(QueryViewModel parameters) { var propertyMapping = new ProductPropertyMapping(); PaginatedList <Product> pagedList; if (string.IsNullOrEmpty(parameters.SearchTerm)) { pagedList = await _productRepository.GetPaginatedAsync(parameters, propertyMapping); } else { pagedList = await _productRepository.GetPaginatedAsync(parameters, propertyMapping, x => x.Name.Contains(parameters.SearchTerm) || x.FullName.Contains(parameters.SearchTerm)); } var productVms = Mapper.Map <IEnumerable <ProductViewModel> >(pagedList); Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(pagedList.PaginationBase, new JsonSerializerSettings { ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver() })); var links = CreateLinksForProducts(parameters, pagedList.HasPrevious, pagedList.HasNext); var dynamicProducts = productVms.ToDynamicIEnumerable(parameters.Fields); var dynamicProductsWithLinks = dynamicProducts.Select(product => { var productDictionary = product as IDictionary <string, object>; var productLinks = CreateLinksForProduct((int)productDictionary["Id"], parameters.Fields); productDictionary.Add("links", productLinks); return(productDictionary); }); var resultWithLinks = new { Links = links, Value = dynamicProductsWithLinks }; return(Ok(resultWithLinks)); }