public async Task <PagedList <Company> > GetCompaniesAsync(CompanyResourceParameter parameters) { if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } //if (string.IsNullOrWhiteSpace(parameters.CompanyName) && string.IsNullOrWhiteSpace(parameters.SearchTerm)) //{ // return await _myContext.Companies.ToListAsync(); //} var queryExpression = _myContext.Companies as IQueryable <Company>; if (!string.IsNullOrWhiteSpace(parameters.CompanyName)) { parameters.CompanyName = parameters.CompanyName.Trim(); queryExpression = queryExpression.Where(x => x.Name == parameters.CompanyName); } if (!string.IsNullOrWhiteSpace(parameters.SearchTerm)) { parameters.SearchTerm = parameters.SearchTerm.Trim(); queryExpression = queryExpression.Where(x => x.Name.Contains(parameters.SearchTerm) || x.Introduction.Contains(parameters.SearchTerm)); } return(await PagedList <Company> .Create(queryExpression, parameters.PageNumber, parameters.PageSize)); }
public string CreateCompaniesResourceUri(CompanyResourceParameter parameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(Url.Link(nameof(GetCompanies), new { pageNumber = parameters.PageNumber - 1, pageSize = parameters.PageSize, companyName = parameters.CompanyName, searchTerm = parameters.SearchTerm })); case ResourceUriType.NextPage: return(Url.Link(nameof(GetCompanies), new { pageNumber = parameters.PageNumber + 1, pageSize = parameters.PageSize, companyName = parameters.CompanyName, searchTerm = parameters.SearchTerm })); default: return(Url.Link(nameof(GetCompanies), new { pageNumber = parameters.PageNumber, pageSize = parameters.PageSize, companyName = parameters.CompanyName, searchTerm = parameters.SearchTerm })); } }
public async Task <ActionResult <IEnumerable <CompanyResource> > > GetCompanies([FromQuery] CompanyResourceParameter parameters) { var companies = await _companyRepository.GetCompaniesAsync(parameters); //var companyResource = new List<CompanyResource>(); //foreach (var company in companies) //{ // companyResource.Add(new CompanyResource // 属性多的时候赋值很麻烦 使用automap // { // Id = company.Id, // CompanyName = company.Name // }); //} var PerviousPageLink = companies.HasPrevious ? CreateCompaniesResourceUri(parameters, ResourceUriType.PreviousPage) : null; var nextPageLink = companies.HasNext ? CreateCompaniesResourceUri(parameters, ResourceUriType.NextPage) : null; var paginationMetadata = new { totalCount = companies.TotalCount, pageSize = companies.PageSize, currentPage = companies.CurrentPage, totalPages = companies.TotalPages, PerviousPageLink, nextPageLink }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata, new JsonSerializerOptions { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping })); var companyResources = _mapper.Map <IEnumerable <CompanyResource> >(companies); //return NotFound(); // NotFound 空集合也认为是找到了 所以不是NotFound return(Ok(companyResources)); // 控制器级别的方法 200 //return new JsonResult(companies); }