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));
        }