نمایش نتایج 1 تا 2 از 2

نام تاپیک: اعتبار سنجی مدل با کمک فیلتر

  1. #1

    اعتبار سنجی مدل با کمک فیلتر

    در ASP.NET Core MVC معمولا از ModelState.IsValid برای بررسی معتبر بودن مدل استفاده می کنیم. مشکل این است که باید این چک را درون همه ی اکشن ها انجام دهیم و برای مسیر های مختلف از دستورات شرطی استفاده کنیم.


    [HttpPost]
    public IActionResult Create(Movie model)
    {
    if (ModelState.IsValid)
    {
    // Save changes
    return RedirectToAction(nameof(Index));
    }
    else
    {
    return View(model);
    }
    }


    این کد تنها روی یک متد کار میکند و اگر در جاهای دیگر پروژه هم نیاز به اعتبار سنجی داشته باشید (که همیشه داریم) باید دوباره دستور شرطی را برای ModelState پیاده کنیم.

    راه ساده تر این است که مکانیزم کنترل اعتبار سنجی را با کمک یک اکشن فیلتر پیاده کنیم. یک فیلتر در ASP.NET Core می تواند در مسیر اکشن قرار گیرد و وضعیت ModelState را بررسی کند. سپس می توانیم فیلتر را روی یک اکشن یا کل متدهای یک کنترلر اعمال کنیم یا آن را به صورت فیلترهای گلوبال در همه ی پروژه فعال کنیم. دیگر نیاز به پیاده سازی شرط ModelState در کل پروژه نخواهیم داشت.



    internal class ValidateModelAttribute : Attribute, IActionFilter
    {
    public void OnActionExecuted(ActionExecutedContext context)
    {
    // No action
    }

    public void OnActionExecuting(ActionExecutingContext context)
    {
    if (!context.ModelState.IsValid)
    {
    var ctrl = (Controller)context.Controller;

    var view = new ViewResult
    {
    ViewName = context.RouteData.Values["Action"].ToString(),
    ViewData = ctrl.ViewData
    };

    context.Result = view;
    }
    }
    }


    در این فیلتر ما ابتدا وضعیت ModelState را چک می کنیم. در صورتی که IsValid درست نباشد کاربر باید به فرم ورود Redirect شود. برای پیدا کردن ویوی مروبوطه از Context استفاده شده است.


    بعد از تعریف فیلتر کد ما به صورت زیر تغییر میکند.


    [HttpPost]
    [ValidateModel]
    public IActionResult Create(Movie model)
    {
    // Save changes
    return RedirectToAction(nameof(Index));
    }



    سورس کامل این برنامه را می توانید از GitHub دانلود کنید. راه ساده تر این است که این فیلتر را از طریق Nuget نصب کنید.
    کافی است در Package Manager Console دستور زیر را اجرا کنید :


    Install-Package Codehaks.Common

  2. #2

    نقل قول: اعتبار سنجی مدل با کمک فیلتر

    البته با استفاده از ApiController و قراردادن این Attribute بالای نام Controller ، عمل ModelState Validation + یک سری کارهای دیگه بصورت خودکار و بدون پکیج های جانبی انجام میشه که نوع Response در صورت رخ دادن ارور رو هم میشه داخل Startup.cs تغییر داد :
    https://www.strathweb.com/2018/02/ex...-core-mvc-2-1/

تاپیک های مشابه

  1. سوال: چگونه اعتبار سنجی کنیم؟
    نوشته شده توسط mostafarastin239 در بخش Silverlight
    پاسخ: 19
    آخرین پست: پنج شنبه 28 مرداد 1389, 15:44 عصر
  2. اعتراض به حذف لینک از امضا
    نوشته شده توسط jalalx در بخش گفتگو با مسئولین سایت، درخواست و پیشنهاد
    پاسخ: 11
    آخرین پست: سه شنبه 05 مرداد 1389, 21:17 عصر
  3. گفتگو: اعتراض
    نوشته شده توسط maryam6102 در بخش گفتگو با مسئولین سایت، درخواست و پیشنهاد
    پاسخ: 3
    آخرین پست: سه شنبه 08 بهمن 1387, 16:05 عصر
  4. نمایندگی معتبر فروش دلفی 3
    نوشته شده توسط SuperElectric در بخش برنامه نویسی در Delphi
    پاسخ: 2
    آخرین پست: سه شنبه 28 فروردین 1386, 08:01 صبح
  5. ورود تاریخ معتبر
    نوشته شده توسط akb_behnam در بخش Foxpro
    پاسخ: 5
    آخرین پست: سه شنبه 01 اسفند 1385, 14:25 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •