0Pricing
C# Academy · درس

التحقق باستخدام Data Annotations

تحقّقوا من صحة النماذج باستخدام السمات

التحقق باستخدام Data Annotations درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.

ما المقصود بالتحقق باستخدام Data Annotations؟

إن Data Annotations هي سمات تضعها على خصائص النموذج لتعريف قواعد التحقق مباشرةً في فئات C#. يقرأ ASP.NET Core هذه السمات أثناء ربط النموذج، ويتحقق تلقائيًا من صحة الطلبات الواردة.

وتوجد هذه السمات في مساحة الأسماء System.ComponentModel.DataAnnotations.

using System.ComponentModel.DataAnnotations;

public class RegisterRequest
{
    [Required]
    public string Username { get; set; }
}

السمة [Required]

تضمن [Required] ألا تكون الخاصية فارغة (وألا تكون سلسلة نصية فارغة أيضًا بشكل افتراضي). وإذا أغفل العميل الحقل، يفشل التحقق من صحة النموذج قبل تشغيل الإجراء الخاص بك.

يمكنك تخصيص الرسالة باستخدام ErrorMessage.

public class RegisterRequest
{
    [Required(ErrorMessage = "Username is required.")]
    public string Username { get; set; }

    [Required]
    public string Password { get; set; }
}

التحقق من الأرقام باستخدام [Range]

تقيّد [Range] القيمة الرقمية بحد أدنى وحد أقصى شاملين. وهي تعمل مع int وdouble وdecimal وغير ذلك.

استخدمها للأعمار والكميات والتقييمات وأي رقم ذي نطاق محدد.

public class ProductRequest
{
    [Range(1, 1000, ErrorMessage = "Quantity must be between 1 and 1000.")]
    public int Quantity { get; set; }

    [Range(0.01, 9999.99)]
    public decimal Price { get; set; }
}

التحقق من البريد الإلكتروني باستخدام [EmailAddress]

تتحقق [EmailAddress] من أن السلسلة النصية تبدو كعنوان بريد إلكتروني صالح. ادمجها مع [Required] لضمان وجود الحقل وصحة تنسيقه.

public class ContactRequest
{
    [Required]
    [EmailAddress(ErrorMessage = "Please enter a valid email.")]
    public string Email { get; set; }
}

قيود طول السلسلة النصية

تحدد [StringLength] طولًا أقصى، وطولًا أدنى اختياريًا، للنص. ويُعد كل من [MinLength] و[MaxLength] بديلين أبسط.

public class RegisterRequest
{
    [Required]
    [StringLength(20, MinimumLength = 3)]
    public string Username { get; set; }

    [MaxLength(500)]
    public string Bio { get; set; }
}

مطابقة الأنماط باستخدام [RegularExpression]

تتحقق [RegularExpression] من السلسلة النصية بمقارنتها بنمط تعبير نمطي. وهي مناسبة لتنسيقات مثل أرقام الهواتف والرموز البريدية والمعرّفات المختصرة.

public class ProfileRequest
{
    [RegularExpression(@"^[a-z0-9-]+$",
        ErrorMessage = "Slug may only contain lowercase letters, digits and dashes.")]
    public string Slug { get; set; }
}

مقارنة حقلين باستخدام [Compare]

تضمن [Compare] تطابق خاصية مع خاصية أخرى. ومن الأمثلة الشائعة تأكيد كلمة المرور.

public class RegisterRequest
{
    [Required]
    public string Password { get; set; }

    [Compare(nameof(Password), ErrorMessage = "Passwords do not match.")]
    public string ConfirmPassword { get; set; }
}

كيفية إبلاغ ModelState عن الأخطاء

عند فشل التحقق، يملأ ASP.NET Core الكائن ModelState بالأخطاء. وفي وحدة تحكم API المزيّنة بـ [ApiController]، تعيد الطلبات غير الصالحة استجابة 400 تلقائيًا، لذلك نادرًا ما تحتاج إلى فحصه يدويًا.

[ApiController]
[Route("api/[controller]")]
public class AccountController : ControllerBase
{
    [HttpPost("register")]
    public IActionResult Register(RegisterRequest request)
    {
        // [ApiController] already returned 400 if invalid
        return Ok("Registered " + request.Username);
    }
}

عمليات الفحص اليدوي لـ ModelState

من دون [ApiController]، كما هو الحال في وحدات تحكم MVC، تفحص ModelState.IsValid بنفسك وتقرر كيفية الاستجابة.

public IActionResult Register(RegisterRequest request)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    return Ok();
}

دمج عدة سمات

يمكن تكديس السمات. إذ يمكن لخاصية واحدة أن تحمل عدة سمات، ويجب أن تجتازها جميعًا. ولا يؤثر الترتيب في عملية التقييم، لكن احرص على إبقائها واضحة وسهلة القراءة.

public class SignupRequest
{
    [Required]
    [EmailAddress]
    [StringLength(254)]
    public string Email { get; set; }

    [Required]
    [Range(18, 120, ErrorMessage = "Must be 18 or older.")]
    public int Age { get; set; }
}

متى لا تكفي Data Annotations

تُعد Data Annotations رائعة للقواعد البسيطة والتصريحية. لكن منطق التحقق بين الخصائص، أو عمليات البحث في قاعدة البيانات، أو القواعد الشرطية مثل «مطلوب فقط عند تحقق X» يصبح سريعًا معقدًا وغير مريح. وهنا تتألق FluentValidation، وهو ما سنغطيه بعد ذلك.

تحقق سريع

اختبر فهمك لـ Data Annotations.

مراجعة

لقد تعلّمت أن Data Annotations تعرّف قواعد التحقق على هيئة سمات: تستخدم [Required] للتحقق من الوجود، و[Range] لتحديد الحدود الرقمية، و[EmailAddress] للتحقق من تنسيق البريد الإلكتروني، بالإضافة إلى [StringLength] و[RegularExpression] و[Compare]. ومع [ApiController]، تعيد حالات الفشل الاستجابة 400 تلقائيًا عبر ModelState. أما القواعد المعقدة، فاستخدم FluentValidation بعد ذلك.

الأسئلة الشائعة

هل درس «التحقق باستخدام Data Annotations» مجاني؟

نعم — نص درس «التحقق باستخدام Data Annotations» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.

ماذا ستتعلم في «التحقق باستخدام Data Annotations»؟

تحقّقوا من صحة النماذج باستخدام السمات تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «التحقق باستخدام Data Annotations»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. التحقق باستخدام Data Annotations
  2. قواعد FluentValidation
  3. القواعد المخصّصة والمشروطة
  4. دمج التحقق مع واجهات API
← العودة إلى C# Academy