Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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
                }));
            }
        }
Ejemplo n.º 3
0
        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);
        }