التحقق من صحة البيانات في C# (.NET): دليل شامل
التحقق من صحة البيانات هو أحد الجوانب الرئيسية لتطوير تطبيقات موثوقة وآمنة بلغة C#. فهو يضمن أن البيانات المدخلة تتوافق مع التنسيق المتوقع، ونطاقات القيم، وقواعد العمل. في نظام .NET البيئي، توجد عدة أدوات قوية للتحقق من الصحة: من السمات المضمنة System.ComponentModel.DataAnnotations إلى المكتبة المرنة FluentValidation. في هذه المقالة، سنشرح بالتفصيل كلا النهجين مع أمثلة على الكود.
1. التحقق المضمن عبر DataAnnotations
توفر مساحة الأسماء System.ComponentModel.DataAnnotations مجموعة من السمات التي يمكن تطبيقها على خصائص فئات النماذج. هذه هي أبسط وأسرع طريقة للتحقق من الصحة، خاصة في ASP.NET Core MVC و Blazor.
السمات الأساسية:
[Required]— لا يمكن أن تكون القيمةnullأو فارغة.[StringLength(max)]— تحديد طول السلسلة النصية.[Range(min, max)]— التحقق من النطاقات الرقمية.[RegularExpression(pattern)]— التحقق باستخدام التعبير المنتظم.[EmailAddress]— التحقق من البريد الإلكتروني.[Compare("OtherProperty")]— مقارنة خاصيتين (مثل كلمة المرور والتأكيد).
مثال على نموذج بالسمات:
public class UserRegistrationDto{ [Required(ErrorMessage = "الاسم مطلوب")] [StringLength(50, MinimumLength = 2, ErrorMessage = "يجب أن يحتوي الاسم على 2 إلى 50 حرفاً")] public string FirstName { get; set; }
[Required(ErrorMessage = "البريد الإلكتروني مطلوب")] [EmailAddress(ErrorMessage = "تنسيق البريد الإلكتروني غير صحيح")] public string Email { get; set; }
[Required] [Range(18, 120, ErrorMessage = "يجب أن يكون العمر بين 18 و 120")] public int Age { get; set; }
[Required] [DataType(DataType.Password)] public string Password { get; set; }
[Compare("Password", ErrorMessage = "كلمات المرور غير متطابقة")] public string ConfirmPassword { get; set; }}التحقق اليدوي من النموذج:
public static bool ValidateUser(UserRegistrationDto user, out List<ValidationResult> errors){ var context = new ValidationContext(user); errors = new List<ValidationResult>(); return Validator.TryValidateObject(user, context, errors, validateAllProperties: true);}
// الاستخدام:var user = new UserRegistrationDto { FirstName = "A", Email = "invalid", Age = 15 };if (!ValidateUser(user, out var errors)){ foreach (var error in errors) Console.WriteLine(error.ErrorMessage);}2. FluentValidation — التحقق المتقدم
تقدم مكتبة FluentValidation (NuGet: FluentValidation.AspNetCore) طريقة أكثر مرونة وقابلية للقراءة لوصف قواعد التحقق من خلال واجهة fluent. وهي مثالية للسيناريوهات المعقدة: التحقق الشرطي، الرسائل المخصصة، سلاسل القواعد، والتكامل مع حاويات DI.
التثبيت عبر NuGet:
dotnet add package FluentValidation.AspNetCoreمثال على المدقق:
using FluentValidation;
public class UserValidator : AbstractValidator<UserRegistrationDto>{ public UserValidator() { RuleFor(u => u.FirstName) .NotEmpty().WithMessage("الاسم لا يمكن أن يكون فارغاً") .Length(2, 50).WithMessage("يجب أن يحتوي الاسم على 2 إلى 50 حرفاً");
RuleFor(u => u.Email) .NotEmpty().WithMessage("البريد الإلكتروني مطلوب") .EmailAddress().WithMessage("تنسيق البريد الإلكتروني غير صحيح");
RuleFor(u => u.Age) .InclusiveBetween(18, 120).WithMessage("يجب أن يكون العمر بين