示例#1
0
        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)));
        }
示例#2
0
        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));
        }