ASP.NET Core MVC’de Doğrulama (Validation) Kullanımı: Yöntemler ve İpuçları
Bu makalede, ASP.NET Core MVC kullanarak veri doğrulama kontrolleri nasıl gerçekleştirilir, bu yöntemler nelerdir ve bunları nasıl uygularız konusuna değineceğim.
- Ana Sınıfa Doğrudan Uygulama
Bu yöntemde, ilgili sınıfın özelliklerine doğrudan doğrulama işlemleri eklenir. Bunun için sayfamızda using System.ComponentModel.DataAnnotations;
ifadesinin ekli olması gerekmektedir. Aşağıdaki örnekte, Açıklama alanının boş olmaması gerektiğini ve hata durumunda alınacak mesajı belirttik.
Bu yöntem, kolay olmasına rağmen, burada belirttiğimiz kuralların Code First gibi yaklaşımlarda veritabanı tablolarına da yansıyacağını unutmamak önemlidir. Benzer şekilde, Database First yaklaşımında, her veritabanı güncellemesinde bu kuralların ana sınıflardan silineceğini unutmayın.
public class person
{
[Required(ErrorMessage = "Dikkat Bu alanı boş geçmeyin.")]
public string Aciklama { get; set; }
}
- ModelMetadataType Kullanarak Başka Sınıfta Doğrulama Yapma
Bu yöntemde, doğrulama işlemini başka bir sınıfa taşıyoruz. Bu sayede ana sınıfımız daha temiz kalır ve doğrulama görevi ise başka bir sınıfa devredilir.
[ModelMetadataType(typeof(personMetadaType))]
public class person
{
public string comments { get; set; }
}
public class personMetadaType
{
[Required(ErrorMessage = "Dikkat Bu alanı boş geçmeyin.")]
public string Aciklama { get; set; }
- FluentValidation Kütüphanesi ile Doğrulama Yapma
FluentValidation, klasik ASP.NET için FluentValidation ve ASP.NET Core için FluentValidation.AspNetCore paketlerini NuGet üzerinden yükleyerek kullanılır. Bu makalede, ASP.NET Core MVC’ye göre ilerlediğimiz için ona göre anlatıyorum.
Başlamak için, Startup dosyasına using FluentValidation.AspNetCore;
ifadesini ekleyerek ConfigureServices metodunda AddFluentValidation
yöntemiyle FluentValidation’ı kaydediyoruz.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews().AddFluentValidation(x=>x.RegisterValidatorsFromAssemblyContaining<Startup>());
}
RegisterValidatorsFromAssemblyContaining()
fonksiyonu, FluentValidation yapısının projemizde belirttiğimiz assembly içindeki tüm doğrulama yapılarını bulmasını sağlar. Startup dosyası yerine projedeki başka bir sınıfı da verebilirdik.
Bu adımdan sonra, FluentValidation yapısı projemizdeki AbstractValidator
sınıfından türeyen tüm yapıları takip edecektir.
public class person
{
public string comments { get; set; }
}
public class KisiFluentValidation : AbstractValidator<person>
{
public KisiFluentValidation()
{
RuleFor(x => x.Aciklama).NotNull().WithMessage("Bu alan null geçilemez.");
RuleFor(x => x.Aciklama).NotEmpty().WithMessage("Bu alan emty geçilemez.");
}
}
Yukarıdaki örnekte, personFluentValidation
sınıfını AbstractValidator
sınıfından türeyen bir sınıf olarak tanımladık ve Kisi
türünde olduğunu belirttik. FluentValidation yapısı, kurallarımızı Constructor içerisinde tanımlamamızı bekler. RuleFor
metodunu kullanarak kurallarımızı yazdık.
Genellikle, teknik açıdan, ikinci veya üçüncü yöntem daha fazla tercih edilmektedir.
Eline sağlık.