public async Task <IActionResult> GetPagedStorageLists([FromQuery] StorageListDtoParameters parameters) { var storageLists = await _storageListRepository.GetPagedStorageListsAsync(parameters); var previousPageLink = storageLists.HasPrevious ? CreateStorageListResourceUri(parameters, ResourceUnType.PreviousPage) : null; var nextPageLink = storageLists.HasNext ? CreateStorageListResourceUri(parameters, ResourceUnType.NextPage) : null; var paginationMetdata = new { totalCount = storageLists.TotalCount, pageSize = storageLists.PageSize, currentPage = storageLists.CurrentPage, totalPage = storageLists.TotalPages, previousPageLink, nextPageLink }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize( paginationMetdata, new JsonSerializerOptions { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping })); var storageListDto = _mapper.Map <IEnumerable <StorageListDto> >(storageLists); return(Ok(storageListDto)); }
//[HttpDelete("storageListId",Name = nameof(DeleteStorageList))] //public async Task<IActionResult> DeleteStorageList(Guid storageListId) //{ // var entity = await _storageListRepository.GetStorageListAsync(storageListId); // if(entity == null) // { // return NotFound(); // } // _storageListRepository.DeleteStorageList(entity); // _storageListRepository.SaveAsync(); // return NoContent(); //} //[HttpOptions] //public IActionResult GetStorageListOptions() //{ // Response.Headers.Add("Allow", "DELETE,GET,PATCH,PUT,OPTIONS"); // return Ok(); //} //前后页码的uri也需要查询条件,因为是根据原本的查询条件做的分页 private string CreateStorageListResourceUri(StorageListDtoParameters parameters, ResourceUnType type) { switch (type) { case ResourceUnType.PreviousPage: //上一页 return(Url.Link( nameof(GetPagedStorageLists), new { pageNumber = parameters.PageNumber - 1, pageSize = parameters.PageSize, storageListNum = parameters.StorageListNum, searchTerm = parameters.SearchTerm })); case ResourceUnType.NextPage: //下一页 return(Url.Link( nameof(GetPagedStorageLists), new { pageNumber = parameters.PageNumber + 1, pageSize = parameters.PageSize, storageListNum = parameters.StorageListNum, searchTerm = parameters.SearchTerm })); default: //当前页 return(Url.Link( nameof(GetPagedStorageLists), new { pageNumber = parameters.PageNumber, pageSize = parameters.PageSize, storageListNum = parameters.StorageListNum, searchTerm = parameters.SearchTerm })); } }
//按理说应该用该方法,但是该方法映射问题无法解决,使用上面的方法 //public async Task<StorageListWithProductDto> GetStorageListWithProductAsync(Guid storageListId) //{ // if (storageListId == Guid.Empty) // { // throw new ArgumentNullException(nameof(storageListId)); // } // var storageList = _context.StorageLists // .FirstOrDefaultAsync(x => x.Id == storageListId); // var storageProducts = _context.StorageProducts.Where(x => x.StorageListId == storageListId); // var storageListWithProductDto = _mapper.Map<StorageListWithProductDto>(storageList); // var storageProductDtos = _mapper.Map<ICollection<StorageProductDto>>(storageProducts); // storageListWithProductDto.StorageProductDtos = storageProductDtos; // return storageListWithProductDto; // return await _context.StorageLists.FirstOrDefaultAsync(x => x.Id == storageListId); //} public async Task <PagedList <StorageList> > GetPagedStorageListsAsync(StorageListDtoParameters parameters) { if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } var querryExpression = _context.StorageLists as IQueryable <StorageList>; //StorageListDtoParameters中的StorageListNum查询参数 if (!String.IsNullOrWhiteSpace(parameters.StorageListNum)) { parameters.StorageListNum = parameters.StorageListNum.Trim(); querryExpression = querryExpression.Where(x => x.StorageNumber.Contains(parameters.StorageListNum)); } //StorageListDtoParameters中的SearchTerm查询参数 if (!String.IsNullOrWhiteSpace(parameters.SearchTerm)) { parameters.SearchTerm = parameters.SearchTerm.Trim(); querryExpression = querryExpression.Where(x => x.StorageNumber.Contains(parameters.SearchTerm)); } return(await PagedList <StorageList> .CreateAsync(querryExpression, parameters.PageNumber, parameters.PageSize)); }