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); } }
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); }
public PaginatedResults(long total, PaginationParams paginationParams, SortParams sortParams, IEnumerable <TData> data) { BuildUrl(total, paginationParams, sortParams, data); CalculateProperties(total, paginationParams); Data = data.ToList(); }