Пример #1
0
        private void BuildUrl(long total, PaginationParams paginationParams, SortParams sortParams, IEnumerable <TData> data)
        {
            Uri baseUri = new Uri(paginationParams.Host);
            Uri uri     = new Uri(baseUri, paginationParams.Path);

            var lastPage = (int)Math.Ceiling(total / (decimal)paginationParams.PerPage);

            if (paginationParams.Page + 1 <= lastPage)
            {
                var queryNext = GetSortQueryParams(sortParams);
                NextPageUrl = QueryHelpers.AddQueryString(uri.ToString(), queryNext);
            }

            if (paginationParams.Page - 1 >= 1)
            {
                var queryPrevious = GetSortQueryParams(sortParams);
                PreviousPageUrl = QueryHelpers.AddQueryString(uri.ToString(), queryPrevious);
            }
        }
Пример #2
0
        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            StringValues page;

            bindingContext.HttpContext.Request.Query.TryGetValue("page", out page);
            int?l_page = page.Count > 0 ? page[0].ToN <int>() : null;

            StringValues perPage;

            bindingContext.HttpContext.Request.Query.TryGetValue("perPage", out perPage);
            PerPage?e_pageSize = perPage.Count > 0 ? perPage[0].ToEnum <PerPage>() : null;

            string host = $"{bindingContext.HttpContext.Request.Scheme}://{bindingContext.HttpContext.Request.Host.Value}";
            string path = bindingContext.HttpContext.Request.Path.Value;

            var result = new PaginationParams()
            {
                Page    = l_page ?? 0,
                PerPage = e_pageSize ?? PerPage.p10,
                Host    = host,
                Path    = path
            };

            var validationResult = new PaginationParamsValidator().Validate(result);

            if (validationResult.IsValid)
            {
                bindingContext.Result = ModelBindingResult.Success(result);
            }
            else
            {
                bindingContext.Result = ModelBindingResult.Failed();
                throw new ValidationException(validationResult.Errors);
            }

            return(Task.CompletedTask);
        }
Пример #3
0
 public PaginatedResults(long total, PaginationParams paginationParams, SortParams sortParams, IEnumerable <TData> data)
 {
     BuildUrl(total, paginationParams, sortParams, data);
     CalculateProperties(total, paginationParams);
     Data = data.ToList();
 }