ASP.NET Core Web Api – Arama
Merhabalar, bu yazıda ASP.NET Core ile web api’de arama nasıl yapılır bunu öğreneceğiz.
Yani bizim apimize bir istek de bulunulduğunda bu istekte ki arama kelimesine göre sonuçlar döndermeye çalışacağız. Örnek olarak;
https://localhost:5001/api/owners?name=Ali UYSAL
Bu tarz bir istekte bizim tek bir sonuç döndermemiz gerekiyor “Ali UYSAL”
OwnerParameters
arama sorgunuzu bir sorgu parametresi olarak göndereceğimizden önce sınıfımızı oluşturacağız.
public class OwnerParameters : QueryStringParameters
{
public uint MinYearOfBirth { get; set; }
public uint MaxYearOfBirth { get; set; } = (uint)DateTime.Now.Year;
public bool ValidYearRange => MaxYearOfBirth > MinYearOfBirth;
public string Name { get; set; }
}
Burada Name değişkenini oluşturduk, diğer minYearsOfBirth ve MaxYearsOfBirth daha sonraki makaleler de ele alacağımız filtreleme ve sayfalama işlemlerinde kullanacağımız için şimdilik göz ardı edebilirsiniz.
Yapmamız gereken bir sonraki şey, OwnerRepository
adında ki class’ımız da arama işlevselliğini uygulamak :
public PagedList<Owner> GetOwners(OwnerParameters ownerParameters)
{
var owners = FindByCondition(o => o.DateOfBirth.Year >= ownerParameters.MinYearOfBirth &&
o.DateOfBirth.Year <= ownerParameters.MaxYearOfBirth);
SearchByName(ref owners, ownerParameters.Name);
return PagedList<Owner>.ToPagedList(owners.ToList().OrderBy(on => on.Name),
ownerParameters.PageNumber,
ownerParameters.PageSize);
}
private void SearchByName(ref IQueryable<Owner> owners, string ownerName)
{
if (!owners.Any() || string.IsNullOrWhiteSpace(ownerName))
return;
owners = owners.Where(o => o.Name.ToLower().Contains(ownerName.Trim().ToLower()));
}
Öncelikle,IsNullOrWhiteSpace
üzerinde basit bir kontrol yaparak name parametresinin gerçekten gönderilip gönderilmediğini kontrol etmemiz gerekir Name
eğer api isteğinde gönderilmemiş ise, bir şey aramanın bir anlamı yok.
Daha sonra, Name
dizgenin yan tümcesini kullanıyoruz. Yine burada filtreleme ile ilgili kodlarda mevcut, bizi ilgilendiren kısım;
private void SearchByName(ref IQueryable<Owner> owners, string ownerName)
{
if (!owners.Any() || string.IsNullOrWhiteSpace(ownerName))
return;
owners = owners.Where(o => o.Name.ToLower().Contains(ownerName.Trim().ToLower()));
}
Geri kalan her şey aynı.
Uygulamamız da arama kodları sadece bu kadar. Gördüğünüz gibi gerçekten basit ve çok az kod ile Api’mize arama ekleyebildik.
Şimdi Postman tarzı bir uygulama ile apimizde arama yapmak için istek de bulunduğumuz da;
https://localhost:5001/api/owners?name=Ali UYSAL
Sonuç;
tam ad girdiğimiz için tek sonuç geldi, biz içerisinde o geçenleri listelemeye çalışırsak bu durumda benim veritabanımda ki bilgilere göre 3 kayıt gelmeli.
https://localhost:5001/api/owner?name=o
[
{
"id": "261e1685-cf26-494c-b17c-3546e65f5620",
"name": "Ahmet Barbaros",
"dateOfBirth": "1974-11-14T00:00:00",
"address": "Teşvikiye"
},
{
"id": "24fd81f8-d58a-4bcc-9f35-dc6cd5641906",
"name": "Oya Aydoğan",
"dateOfBirth": "1980-12-05T00:00:00",
"address": "Teşvikiye"
},
{
"id": "66774006-2371-4d5b-8518-2177bcf3f73e",
"name": "Hakan Somun",
"dateOfBirth": "1998-12-15T00:00:00",
"address": "Teşvikiye"
}
]
Eline sağlık
elinize saglik hocam