コード例 #1
0
        public async Task <ActionResult <IEnumerable <CompanyDto> > > GetCompanies([FromQuery] DtoParameters dtoParameter)
        {
            var companies = await _companyRepository.GetCompaniesAsync(dtoParameter);

            var previousLink = companies.HasPrevious ? CreateCompaniesResourceUri(dtoParameter, ResourceUriType.PreviousPage) : null;

            var nextLink = companies.HasNext ? CreateCompaniesResourceUri(dtoParameter, ResourceUriType.NextPage) : null;

            var paginationMetadata = new
            {
                totalCount  = companies.TotalCount,
                pageSize    = companies.PageSize,
                currentPage = companies.CurrentPage,
                totalPages  = companies.TotalPages,
                previousLink,
                nextLink
            };

            Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata,
                                                                          new JsonSerializerOptions
            {
                Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
            }));

            var companiesDto = _mapper.Map <IEnumerable <CompanyDto> >(companies);

            if (companiesDto == null)
            {
                return(NoContent());
            }

            return(Ok(companiesDto));
        }
コード例 #2
0
        private string CreateCompaniesResourceUri(DtoParameters parameters,
                                                  ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(Url.Link(nameof(GetCompanies), new
                {
                    pageInex = parameters.pageInex - 1,
                    pageSize = parameters.pageSize,
                    search = parameters.search
                }));

            case ResourceUriType.NextPage:
                return(Url.Link(nameof(GetCompanies), new
                {
                    pageInex = parameters.pageInex + 1,
                    pageSize = parameters.pageSize,
                    search = parameters.search
                }));

            case ResourceUriType.CurrentPage:
            default:
                return(Url.Link(nameof(GetCompanies), new
                {
                    pageInex = parameters.pageInex,
                    pageSize = parameters.pageSize,
                    search = parameters.search
                }));
            }
        }
コード例 #3
0
 public async Task <PageList <Company> > GetCompaniesAsync(DtoParameters dtoParameter)
 {
     if (dtoParameter == null)
     {
         throw new AggregateException(nameof(dtoParameter));
     }
     if (string.IsNullOrWhiteSpace(dtoParameter.search))
     {
         return(await PageList <Company> .CreateAsync(_context.Companies, dtoParameter.pageInex, dtoParameter.pageSize));
     }
     else
     {
         var search          = dtoParameter.search?.Trim();
         var queryExpression = _context.Companies.Where(c => c.Name.Contains(search) || c.Introduction.Contains(search));
         return(await PageList <Company> .CreateAsync(queryExpression, dtoParameter.pageInex, dtoParameter.pageSize));
     }
 }
コード例 #4
0
 public IActionResult ValidateModelState([FromBody] DtoParameters p)
 {
     return(Ok(p));
 }