پادشاهِ کُدنویسا شو!
کینگتو - آموزش برنامه نویسی تخصصصی - دات نت - سی شارپ - بانک اطلاعاتی و امنیت

Custom Validation Attribute در ASP.NET Core

10 بازدید 0 نظر ۱۴۰۴/۱۲/۱۲
در دنیای توسعه نرم‌افزار، ضرب‌المثلی وجود دارد که می‌گوید: «هرگز به ورودی‌های کاربر اعتماد نکن!» اینجاست که مبحث اعتبارسنجی (Validation) وارد عمل می‌شود. اما گاهی اوقات ابزارهای آماده، پاسخگوی نیازهای خاص و عجیب‌وغریب بیزنس ما نیستند.

در این مقاله، به سراغ Custom Validation Attribute در ASP.NET Core می‌رویم؛ ابزاری که به شما اجازه می‌دهد قوانین شخصی‌سازی‌شده خود را مثل یک "مُهر تایید" روی ویژگی‌های (Properties) مدل‌هایتان بزنید.

 

اعتبارسنجی داده‌ها: نگهبانان دروازه ورود

قبل از اینکه داده‌ای در دیتابیس ذخیره شود، باید از فیلتر اعتبارسنجی عبور کند. ASP.NET Core به صورت پیش‌فرض ویژگی‌هایی مثل [Required]، [StringLength] و [EmailAddress] را در اختیار ما قرار می‌دهد که به آن‌ها Data Annotations می‌گوییم.

اما فرض کنید قانونی دارید که می‌گوید: "نام کاربری نباید شامل کلمه 'Admin' باشد" یا "تاریخ تولد وارد شده نباید برای روزهای جمعه باشد!". برای این موارد، هیچ اتریبیوت آماده‌ای وجود ندارد. اینجاست که باید دست به کار شده و یک Custom Validation Attribute بسازید.

 

چرا از Custom Validation Attribute استفاده کنیم؟

  1. خوانایی بالا (Readability): به جای نوشتن چندین if تکراری در کنترلر، قانون را مستقیماً روی مدل تعریف می‌کنید.

  2. استفاده مجدد (Reusability): یک بار قانون را می‌نویسید و در ده‌ها جای پروژه از آن استفاده می‌کنید.

  3. تمیز نگه داشتن کنترلر (Clean Code): کنترلر شما فقط مسئول هدایت درخواست است، نه چک کردن فرمت ایمیل‌های خاص!

 

مراحل ساخت یک Custom Validation Attribute

برای ساخت یک اتریبیوت شخصی، کافیست دو گام ساده بردارید:

  1. یک کلاس بسازید که از کلاس پایه ValidationAttribute ارث‌بری کند.

  2. متد IsValid را بازنویسی (Override) کنید.

گام اول: تعریف کلاس

بیایید یک اعتبارسنج بسازیم که چک کند فیلد مورد نظر حتماً شامل یک کلمه خاص (مثلاً دامنه شرکت ما) باشد.

گام دوم: پیاده‌سازی متد IsValid

این متد قلب تپنده اتریبیوت شماست. دو پارامتر ورودی دارد:

  • value: مقداری که کاربر وارد کرده است.

  • validationContext: اطلاعاتی درباره شیء یا کلاسی که در حال اعتبارسنجی است.

 

مثال عملی: اتریبیوت "ایمیل اختصاصی شرکت"

فرض کنید می‌خواهیم فقط به ایمیل‌هایی اجازه ثبت‌نام بدهیم که با دامنه @gemini.com تمام می‌شوند.

نحوه استفاده در مدل (Model):

حالا کافیست این اتریبیوت را روی Property مورد نظر قرار دهید:

 

اعتبارسنجی وابسته (Cross-Property Validation)

گاهی اعتبار یک فیلد به فیلد دیگری بستگی دارد. مثلاً "تاریخ پایان" حتماً باید بعد از "تاریخ شروع" باشد. در این حالت از پارامتر validationContext استفاده می‌کنیم:

 

تفاوت با FluentValidation

بسیاری از توسعه‌دهندگان به جای اتریبیوت‌ها از کتابخانه FluentValidation استفاده می‌کنند.

  • Attributes: برای پروژه‌های کوچک و متوسط عالی هستند و همه چیز دقیقاً روی همان مدل دیده می‌شود.

  • FluentValidation: برای قوانین بسیار پیچیده و زمانی که می‌خواهید منطق اعتبارسنجی را کاملاً از مدل (POCO) جدا کنید، مناسب‌تر است.

 

محدودیت‌ها و نکات حرفه‌ای

  • Client-side Validation: اتریبیوت‌های سفارشی به صورت خودکار در سمت کلاینت (جاوااسکریپت) اجرا نمی‌شوند. برای اینکه در مرورگر هم کار کنند، باید رابط IClientModelValidator را پیاده‌سازی کنید.

  • تزریق وابستگی (DI): به صورت پیش‌فرض نمی‌توانید سرویس‌هایی مثل دیتابیس را در سازنده (Constructor) یک اتریبیوت تزریق کنید. برای این کار باید از HttpContext.RequestServices در داخل متد IsValid استفاده کنید.

 

نتیجه‌گیری

Custom Validation Attribute یکی از تمیزترین راه‌ها برای پیاده‌سازی قوانین بیزنس در ASP.NET Core است. این روش به شما کمک می‌کند تا مدل‌هایی "خود-توضیح" (Self-documenting) داشته باشید و از ورود داده‌های مخرب یا اشتباه به قلب سیستم جلوگیری کنید.

به یاد داشته باشید که اعتبارسنجی خوب، یعنی کاربری که کمتر با خطاهای سروری (500) روبرو می‌شود و دیتابیسی که همیشه داده‌های سالم در خود دارد.

 
لینک استاندارد شده: eP3nsw7o

0 نظر

    هنوز نظری برای این مقاله ثبت نشده است.
جستجوی مقاله و آموزش
دوره‌ها با تخفیفات ویژه