اعتبارسنجی – Validation فرآیند بررسی و تأیید صحت دادههای ورودی به برنامه است. البته در Asp.Net Core، این فرآیند به شما کمک میکند تا اطمینان حاصل کنید که دادههای ورودی کاربران با قواعد و محدودیتهای تعریف شده سازگار است. در ASP.NET Core، اعتبارسنجی معمولاً به دو دسته تقسیم میشود:
اعتبارسنجی (Validation) در ASP.NET Core یک بخش حیاتی از توسعهی برنامههای وب است که به شما امکان میدهد تا اطمینان حاصل کنید دادههایی که از کاربران دریافت میکنید، مطابق با انتظارات شما هستند. این فرایند از ایجاد خطاهای ناخواسته و نقض امنیتی جلوگیری میکند.
صحت سنجی در سمت Server در ASP.NET Core با استفاده از ویژگیهای داده (Data Annotations) و یا پیادهسازی منطق اعتبارسنجی سفارشی انجام میشود.
اعتبارسنجی سمت Client به طور معمول با استفاده از JavaScript و کتابخانههایی مانند jQuery Validation انجام میشود. ASP.NET Core به طور پیشفرض Validation سمت کلاینت را با استفاده از ویژگیهای داده و کتابخانههای مربوطه پشتیبانی میکند.
اعتبارسنجی سمت کلاینت به طور خودکار: وقتی از ویژگیهای داده استفاده میکنید و مدلهای شما به درستی پیکربندی شدهاند، ASP.NET Core به طور خودکار Validation سمت کلاینت را با استفاده از JavaScript و کتابخانههای jQuery Validation انجام میدهد.
اعتبارسنجی در هر دو سمت (سرور و کلاینت) ضروری است. اعتبارسنجی سمت Client میتواند تجربه کاربری را بهبود بخشد، اما برای امنیت و اعتبارسنجی نهایی باید اعتبارسنجی سمت Server همیشه انجام شود.
با افزودن Data Annotations ها به مدل های خود می توانیم به راحتی اعتبار سنجی را به برنامه خود اضافه کنیم. همجنین Data Annotation ها در برخی از برنامههای NET مانند ASP.NET Core قابل استفاده است و به این برنامهها اجازه میدهد تا از Data Annotation ها برای اعتبارسنجی استفاده کنند.
برای استفاده از Data Annotation ها ابتدا namespace های زیر را وارد کنید.
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
با استفاده از این Data Annotation میتوانیم نام پراپرتی موجود در مدل را برای نمایش در view مشخص کنیم.
[Display(Name = "نام")]
این Data Annotation مشخص می کند که مقدار اجباری است و نمی توان از آن گذشت و حتما باید پر شود.
[Required(ErrorMessage="Please enter name")]
برای تعیین نوع داده مدل استفاده می شود. انواع مختلفی دارد که تعداد کمی از آنها را به عنوان نمونه قرار دادیم.
[DataType(DataType.Text)]
[DataType(DataType.EmailAddress)]
[DataType(DataType.Date)]
[DataType(DataType.CreditCard)]
[DataType(DataType.Html)]
[DataType(DataType.PhoneNumber)]
با این Data Annotation میتوانیم محدوده ای را بین دو عدد تعیین کنیم.
[Range(100,500,ErrorMessage="Please enter correct value")]
با این Data Annotation می توانیم حداکثر و حداقل طول پراپرتی را مشخص کنیم.
[StringLength(30, ErrorMessage = "Do not enter more than 30 characters")]
[StringLength(12,MinimumLength =3,ErrorMessage = "characters should not be less than 3 and more than 12")]
با این Data Annotation می توانیم حداکثر طول پراپرتی را مشخص کنیم. همچنین میتوان از متغییر های زیر در دیتا انوتیش خود استفاده کنیم.
[MaxLength(100, ErrorMessage="{0} can have a max of {1} characters")]
این Data Annotation امکان ایجاد یک فرمت خاص مثلا برای تاریخ را برای ما فراهم میکند. همچنین قابلیت NullDisplayText دارد. که کاربرد آن Null بودن است.
//شنبه, ۲۶ فروردین ۱۴۰۲
[DisplayFormat(DataFormatString = "{0: dddd, dd MMMM yyyy}")]
//شنبه, ۲۶ فروردین ۱۴۰۲ ۲۲:۵۵:۲۲
[DisplayFormat(DataFormatString = "{0:dddd, dd MMMM yyyy HH:mm:ss}")]
//شنبه, ۲۶ فروردین ۱۴۰۲ ساعت ۲۲:۵۵:۲۲
[DisplayFormat(DataFormatString = "{0:dddd, dd MMMM yyyy ساعت HH:mm:ss}")]
//شنبه, ۲۶ فروردین ۱۴۰۲ ساعت ۲۲:۵۵
[DisplayFormat(DataFormatString = "{0:dddd, dd MMMM yyyy ساعت HH:mm}")]
//شنبه, ۲۶ فروردین ۱۴۰۲ ساعت ۲۲
[DisplayFormat(DataFormatString = "{0:dddd, dd MMMM yyyy ساعت HH}")]
//ساعت ۲۲ شنبه, ۲۶ فروردین ۱۴۰۲
[DisplayFormat(DataFormatString = "{0:ساعت HH dddd, dd MMMM yyyy}")]
//۲۶/۰۱/۱۴۰۲
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
//۱۴۰۲/۰۲/۰۱
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}")]
//NullDisplayText
[DisplayFormat(NullDisplayText = "-", DataFormatString = "{0:MM/dd/yyyy}")]
توسط این Data Annotation میتوانیم یک قالب برای مواردی مثل ایمیل، شماره تلفن، تاریخ و … را تعریف کنیم.
[RegularExpression(@"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", ErrorMessage = "Email is not valid.")]
تلفن همراه
[Display(Name = "تلفن همراه")]
[RegularExpression("09(1[0-9]|3[1-9]|2[1-9])-?[0-9]{3}-?[0-9]{4}", ErrorMessage = "قالب {۰} اشتباه است")]
تلفن ثابت
[Display(Name = "تلفن ثابت")]
[RegularExpression("^0[0-9]{2,}[0-9]{7,}$", ErrorMessage = "قالب {۰} اشتباه است")]
ایمیل
[Display(Name = "ایمیل")]
[Required(ErrorMessage = "فیلد {۰} خالی است")]
[EmailAddress(ErrorMessage = "قالب {۰} اشتباه است")]
حداقل و حداکثر کاراکتر های رمز عبور
[Display(Name = "رمز عبور")]
[Required(ErrorMessage = "فیلد {۰} خالی است")]
[StringLength(12,MinimumLength =3,ErrorMessage ="تعداد کاراکتر ها نباید کمتر از ۳ و بیشتر از ۱۲ باشد")]
[DataType(DataType.Password)]
تبدیل TextBox به TextArea
[DataType (DataType.MultilineText)]
برسی تکرار رمز عبور
[Compare("Password",ErrorMessage ="تکرار رمز عبور صحیح نمیباشد.")]
برای اعتبار سنجی در سمت سرور میتوانید از شرط زیر استفاده کنید.
if (ModelState.IsValid)
{
//Validate success
}
else
{
//Validate failed
}
بعضی مواقع نیاز است عملیات اعتبار سنجی در سمت سرور برسی شود. مثلا برسی اینکه که آیا کاربر قبلا با این ایمیل ثبت نام کرده یا خیر. در این مواقع اعتبار سنجی در سمت سرور انجام میشود. و درصورتی که نیاز بود پیام خطا به کاربر ارسال شود. میتوانید از دستور زیر برای این کار استفاده کنید.
ModelState.AddModelError("Email", "این ایمیل تکراری است");
اگر شما فرمی را با اتربیوت های Data Annotations مورد اعتبار سنجی قرار دهید. زمانی که صفحه شما لود میشود. پیام های خطا و ارور ها نمایش داده میشود. برای اینکه جلوی این اتفاق را بگیرید. و زمانی پیام های خطا نمایش داده شود که روی دکمه کلیک میکنید. میتوانید از دستور زیر استفاده کنید.
ModelState.Clear();
تشکر خدا برکتتان بدهد.