Merhaba arkadaşlar, bu yazımda sizlere .Net Core API Verileri Sayfalama konusundan bahsedeceğim.
API ile verilerimizi listeleme yaparken çok fazla veri listelemesi gerçekleşebilir. Burada da isteklerin uzun sürmesi, yüklenmemesi gibi sorunlar karşımıza çıkabilir. Bu yazımızda verilerimizi gösterirken sayfalama özelliklerini ekleyerek listeleme gerçekleştireceğiz. Örnek vermek gerekirse bir tablomuzda 1000 kayıt bulunuyorsa biz sayfalama işlemleri yaparak belirlediğimiz sınır ile tek sayfada kaç adet veri listelemesi yapacağımızı belirteceğiz ve gösterim sağlayacağız.
Projemizi .Net Core 6 Web Projesi olarak açıyoruz. Create New Project diyerek buradan da ASP.NET Core Web App(Model-View-Controller) seçeneği ile projemizi oluşturuyoruz.
Entity Framework ekleme işlemlerini daha önceki yazılarımda bulabilirsiniz.
DataContext nesnemizi oluşturuyoruz.
public class PagingSampleContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("ConnectionStringBilginiz");
}
public DbSet<Product> Products { get; set; }
}
ProductsController dosyamızı ekliyoruz.
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
[HttpGet("all")]
public IActionResult Get()
{
using PagingSampleContext context = new PagingSampleContext();
var products = context.Products.ToList();
return Ok(products);
}
[HttpGet("paging")]
public IActionResult Paging(int activePage = 1)
{
int pageSize = 1;
using PagingSampleContext context = new PagingSampleContext();
var products = context.Products
.OrderByDescending(x => x.Id)
.Skip((activePage - 1) * pageSize)
.Take(pageSize)
.ToList();
int productCount = context.Products.Count();
double pageCount = (double)((decimal)productCount / Convert.ToDecimal(pageSize));
PagingModel model = new PagingModel();
model.TotalCount = productCount;
model.PageSize = pageSize;
model.ActivePage = activePage;
model.Products = products;
model.TotalPageCount = (int)Math.Ceiling(pageCount);
return Ok(model);
}
}
Paging isminde bir endpointimiz bulunuyor. Burada parametre olarak ActivePage değeri alınıyor. Aktif olduğu sayfanın değerini alıyoruz. Sonrasında Context nesnemizi oluşturarak Skip ve Take metotlarımızı kullanıyoruz. Skip metodumuz active page ve pagesize değerimize göre değer alacak şekilde ayarlıyoruz. Take metoduna da PageSize yani bir sayfada kaç adet veri göstereceğimizi belirtiyoruz. Daha sonra toplam kaç sayfa olacağını belirtmek için ürünlerimizin sayısını alarak pageSize değerine bölüyoruz. Toplam sayfa sayısını da göstermek için pageCount değerimizi yuvarlıyoruz. PagingModel isminde bir sınıf oluşturarak burada property‘lerimizi tanımlıyoruz ve değerlerimizin atamasını gerçekleştiriyoruz. İstek tamamlandığında da bu modelimizde bulunan bilgiler ve veriler bize gösterilecektir.
PagingModel.cs
public class PagingModel
{
public PagingModel()
{
Products = new List<Product>();
}
public int ActivePage { get; set; }
public int PageSize { get; set; }
public int TotalCount { get; set; }
public int TotalPageCount { get; set; }
public List<Product> Products { get; set; }
}
API ile verileri sayfalama işlemleri yukarıdaki gibi yapılabilir.
Umarım faydalı olur.
Bir sonraki yazıda görüşmek üzere…