public async Task <IActionResult> GetPagedStocks([FromQuery] StockDtoParameters parameters) { var stocks = await _stockRepository.GetPagedStocksAsync(parameters); var previousPageLink = stocks.HasPrevious ? CreateStockResourceUri(parameters, ResourceUnType.PreviousPage) : null; var nextPageLink = stocks.HasNext ? CreateStockResourceUri(parameters, ResourceUnType.NextPage) : null; var paginationMetdata = new { totalCount = stocks.TotalCount, pageSize = stocks.PageSize, currentPage = stocks.CurrentPage, totalPage = stocks.TotalPages, previousPageLink, nextPageLink }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize( paginationMetdata, new JsonSerializerOptions { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping })); var stockDto = _mapper.Map <IEnumerable <StockDto> >(stocks); return(Ok(stockDto)); }
//[HttpPost] //public async Task<IActionResult> CreateStock([FromBody] StockAddOrUpdateDto stock) //{ // //这里是否只转换成了Stock,而对其StorageProducts属性包含的属性没有做映射? // var entity = _mapper.Map<Stock>(stock); // _stockRepository.AddStock(entity); // //入库时同时对库存进行操作 // foreach (var storageProductAddOrUpdateDto in stock.StorageProducts) // { // _stockRepository.StockIn(storageProductAddOrUpdateDto); // } // var save = _stockRepository.SaveAsync(); // var returnDto = _mapper.Map<StockDto>(entity); // return CreatedAtRoute(nameof(GetStock), new { stockId = returnDto.Id }, returnDto); //} private string CreateStockResourceUri(StockDtoParameters parameters, ResourceUnType type) { switch (type) { case ResourceUnType.PreviousPage: //上一页 return(Url.Link( nameof(GetPagedStocks), new { pageNumber = parameters.PageNumber - 1, pageSize = parameters.PageSize, stockNum = parameters.ProductName, searchTerm = parameters.SearchTerm })); case ResourceUnType.NextPage: //下一页 return(Url.Link( nameof(GetPagedStocks), new { pageNumber = parameters.PageNumber + 1, pageSize = parameters.PageSize, stockNum = parameters.ProductName, searchTerm = parameters.SearchTerm })); default: //当前页 return(Url.Link( nameof(GetPagedStocks), new { pageNumber = parameters.PageNumber, pageSize = parameters.PageSize, stockNum = parameters.ProductName, searchTerm = parameters.SearchTerm })); } }
public async Task <PagedList <Stock> > GetPagedStocksAsync(StockDtoParameters parameters) { if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } var querryExpression = _context.Stocks as IQueryable <Stock>; //StorageListDtoParameters中的StorageListNum查询参数 if (!String.IsNullOrWhiteSpace(parameters.ProductName)) { parameters.ProductName = parameters.ProductName.Trim(); querryExpression = querryExpression.Where(x => x.ProductName.Contains(parameters.ProductName)); } //StorageListDtoParameters中的SearchTerm查询参数 if (!String.IsNullOrWhiteSpace(parameters.SearchTerm)) { parameters.SearchTerm = parameters.SearchTerm.Trim(); querryExpression = querryExpression.Where(x => x.ProductSpecification.Contains(parameters.SearchTerm)); } return(await PagedList <Stock> .CreateAsync(querryExpression, parameters.PageNumber, parameters.PageSize)); }