شروع دوره پایتون از پنجشنبه 1 خرداد ، مقدماتی تا پیشرفته، بدون پیش نیاز شروع دوره پایتون از پنجشنبه 1 خرداد ، مقدماتی تا پیشرفته، بدون پیش نیاز
🎯 ثبت نام
بستن تبلیغات
تسلط کامل بر سی‌شارپ با یک دوره پروژه‌محور

یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شی‌گرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفه‌ای و امکانات کامل!

مشاهده بیشتر
تسلط جامع بر MVC Core برای توسعه وب حرفه‌ای

یادگیری MVC Core از مبانی تا پیشرفته: شی‌گرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژه‌های کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!

مشاهده بیشتر

آموزش Filters در ASP.Net MVC

آموزش کار با Filters در ASP.Net MVC :

در ASP.Net MVC هر درخواست کاربر به کنترلر و متد اجرایی مناسب و مربوط به آن، ارسال می شود. اما ممکن است مواردی وجود داشته باشد که بخواهید قبل از اجرای هر action method، یک سری از دستورات یا اعتبارسنجی ها، اجرا شود. چهارچوب کاری ASP.Net MVC، برای این منظور، Filter ها را ارئه داده است.
ASP.Net Filters یک کلاس است که در آن می توانید دستورات دلخواه خود را بنویسید تا قبل یا بعد از اجرای یک action method، اجرا شوند. Filter ها را می توانید به صورت مستقیم و یا برنامه نویسی شده به یک متد اجرایی یا کنترلر، اعمال کنید. تعریف مستقیم Filter (تعریف declarative) به این معناست که خاصیت filter attribute را به یک متد اجرایی یا کلاس کنترلر، نسبت دهید. همچنبن روش برنامه نویسی (programmatic) به این صورت است که یک رابط کاربری (interface) متناظر را بر روی متد اجرایی یا کلاس، اجرا می کنیم.
MVC چندین نوع filter را فراهم کرده است. در جدول زیر، لیست انواع فیلترها، کلاس فیلترهای درون ساخته برای هر نوع داده ای و رابط های کاربری که برای ایجاد یک فیلتر دلخواه بایستی اجرا شوند را نشان داده است :

جدول انواع Filters در ASP.Net MVC
نوع فیلتر
توضیح
فیلتر پیش ساخته
رابط کاربری
فیلترهای اجازه دسترسی (Authorization filters)
این فیلتر عملیات اهراز هویت را انجام داده و قبل از اجرای action method صلاحیت ورود کاربر را می سنجد.
[Authorize], [RequireHttps]
IAuthorizationFilter
فیلترهای اجرایی (action Filters)
این فیلتر، برخی دستورات و عملیات ها را قبل و بعد از اجرای یک متد اجرایی action method، اجرا می کند.
IActionFilter
فیلترهای نتیجه (results Filters)
این فیلتر نیز چند دستور یا عملیات را قبل و بعد از اجرا شدن View Result، انجام می دهد.
[OutputCache]
IResultFilter
فیلترهای استثناءها (Exception Filters)
این فیلتر، در صورت بروز یک استثناء یا خطای غیر مدیریت شده در هنگام اجرای پروسه های ASP.Net MVC، یک سری دستورات را اجرا می کند.
[HandleError]
IExceptionFilter

برای درک بهتر عملکرد فیلترها، به تشریح یک مثال عملی از نحوه کار یک فیلتر استثناء درون ساخته (built in Exception Filter) می پردازیم.
یک exception filter، زمانی اجرا می شود که یک خطا مدیریت نشده، در برنامه شما رخ دهد. کلاس Handle Error Attribute ([HandleError]) یک کلاس فیلتر درون ساخته (built in exception filter) چهارچوب کاری ASP.Net MVC است. کلاس درون ساخته HandleError attribute، در صورت بروز یک خطا در برنامه، به صورت پیش فرض فایل Error.cshtml در پوشه Shared Folder پروژه را اجرا می کند.

در بخش زیر، کد فایل درون ساخته فیلتر HandleErrorAttribute نشان داده شده است :

                        
[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        //throw exception for demo
        throw new Exception("This is unhandled exception");
            
        return View();
    }
    public ActionResult About()
    {
        return View();
    }
    public ActionResult Contact()
    {
        return View();
    }        
}

در کد مثال فوق، خاصیت [HandleError] را به کنترلر HomeController نسبت داده ایم. بنابراین، اگر در هر یک از متدهای اجرایی کنترلر HomeController خطایی رخ دهد، این کنترلر صفحه Error Page را نشان خواهد داد. توجه داشته باشید که منظور از خطای مدیریت نشده، خطایی است که توسط ساختار دستوری try-catch شناسایی یا پیش بینی نشده است.
Filter اعمال شده به یک کنترلر، توسط تمامی متدهای اجرایی آن Controller، قابل دریافت و اجرا هستند.
حتما توجه داشته باشید، برای درست کار کردن فیلتر HandleErrorAttribute بایستی مقدار خاصیت CustomError در بخش System.web فایل تنظیمات سایت (web.config)، همانند کد زیر، بر روی “on” تنظیم شده باشد :

<customerrors mode="On" />
نکته:

نام هر کلاس خاصیت (attribute) بایستی با کلمه کلیدی Attribute پایان یابد، مثل HandleErrorAttribute. همچنین Attribute ها بایستی بدون پسوند خاصیت و درون براکت ها مثل [HandleError] به کار رود.

حال، اگر برنامه را اجرا نماید، صفحه خطای Error Page را همانند عکس زیر مشاهده خواهید کرد زیرا به صورت عمدی در مثال این درس، یک خطای مدیریت نشده در متد Index action قرار دارد :

نتیجه گیری این که خاصیت HandleError در صورت بروز هر نوع خطای مدیریت نشده ای در کنترلر HomeController، صفحه خطای پیش فرض را نشان خواهد داد.

آموزش ثبت فیلترها Register Filters در MVC :

فیلترها را در سه سطح می توان اعمال نمود.

  1. سطح عمومی Global Level :
    می توانید فیلترهای عمومی (Global Filters) را با استفاده از متد پیش فرض FilterConfig.RegisterGlobalFilters() در رویداد Application_Start event فایل Global.asax.cs تعیین نمایید. فیلترهای عمومی Global Filters به تمامی کنترلرها و متدهای اجرایی موجود در یک برنامه ASP.Net MVC، اعمال می شوند.
    فیلتر [HandleError] به صورت پیش فرض و در سطح عمومی (Global) بر روی تمامی برنامه های MVC ای که توسط ویژوال استودیو ایجاد شده اند، اعمال می شود. همانند کد زیر :
    // MvcApplication class contains in Global.asax.cs file 
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        }
    }
    // FilterConfig.cs located in App_Start folder 
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }
    } 
    
  2. فیلتر در سطح کنترلر Controller Level :
    می توانید فیلتر مورد نظر خود را بر روی یک کلاس کنترلر خاص نیز اعمال کنید. در این صورت، اگر فیلتر را برای کل کلاس Controller تعیین نمایید، بر روی تمامی متدهای اجرایی آن اعمال خواهد شد. همانند کد مثال عملی زیر :
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
    
  3. فیلتر در سطح متد اجرایی Action Method level :
    همچنین می توان فیلتر مورد نظر را فقط بر روی یک متد اجرایی خاص اعمال نمود. در این صورت، فیلتر فقط بر روی آن تاثیر خواهد داشت. همانند کد زیر :
    public class HomeController : Controller
    {
        [HandleError]
        public ActionResult Index()
        {
            return View();
        }
    }
    

همانند روش هایی که در کدهای فوق نشان داده شد، می توانید چندین فیلتر درون ساخته یا فیلترهای مورد نظر خود را به صورت عمومی (Global) یا در سطح کنترلر و یا در سطح متد اجرایی برای اعمال مختلفی مثل [Authorize]، [requireHttps]، [Child Action Only]، [Output Cache] و یا [HandleError] اعمال نمایید.

ترتیب فیلتر ها در Filter Order MVC :

همانطور که در بخش های قبل توضیح دادیم، چهارچوب کاری MVC شامل انواع مختلفی فیلتر می باشد و می توان یک یا چندین فیلتر مورد نظر را به یک کنترلر یا متد اجرایی اعمال نمود. بنابراین، فیلترهای اعمال شده به ترتیب زیر اجرا خواهند شد :

  1. فیلترهای تعیین هویت کاربر {Authorization Filters)
  2. فیلترهای اجرایی )Action Filters)
  3. فیلترهای پاسخ دهی (response Filters)
  4. فیلترهای استثناء ها (Exception Filters)

آموزش ایجاد یک فیلتر دلخواه در MVC (Custom Filter) :

می توانید خواص فیلترهای دلخواه خود را (Custom filter Attributes) با اجرای یک رابط کاربری متناسب با فیلترمورد نظرتان، ایجاد کنید. همچنین می توانید یک کلاس FilterAttribute را از کلاس اصلی آن، مشتق کرده و آن کلاس را به عنوان یک attribute به کار ببرید.
برای مثال، فیلترهای IExceptionFilter و کلاس FilterAttribute را برای ایجاد کلاس exception filter مورد نظرتان، ادغام نمایید. یا در حالتی متشابه، یک رابط کاربری IAuthorizationFilter و کلاس FilterAttribute را برای ایجاد یک فیلتر دلخواه authorization filter، با هم ادغام کنید.

مثال های عملی ایجاد یک فیلتر دلخواه در MVC :

در کد مثال زیر، نحوه ایجاد یک فیلتر Exception Filter را آموزش داده ایم.

class MyErrorHandler : FilterAttribute, IExceptionFilter
{
    public override void IExceptionFilter.OnException(ExceptionContext filterContext)
    {
        Log(filterContext.Exception);
        base.OnException(filterContext);
    }
    private void Log(Exception exception)
    {
        //log exception here..
 
    }
}

همجنین می توانید یک کلاس را از ری کلاس یک فیلتر درون ساخته، مشتق کرده و با توسعه و تغییر یک یا چند متد آن، قابلیت ها و کارایی فیلتر درون ساخته را بالا ببرید.
برای درک بهتر، به یک مثال عملی اشاره می کنیم. برای این منظور، یک فیلتر دلخواه (custom exception Filter) را برای log کردن تمانی خطاهای مدیریت نشده برنامه، با مشتق کردن یک کلاس جدید از کلاس درون ساخته HandleErrorAttribute و توسعه و تغییر متد onException آن، همانند کد زیر، ایجاد کرده ایم :

class MyErrorHandler : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        Log(filterContext.Exception);
        base.OnException(filterContext);
    }
    private void Log(Exception exception)
    {
        //log exception here..
 
    }
}

اکنون با تغییر کد کلاس فوق، می توانید خاصیت MyErrorHandle را به صورت عمومی یا در سطح کنترلر یا متد اجرایی، به همان صورتی که فیلتر خاصیت HandleError را اعمال نمودیم، برای برنامه تعیین کنید.

[MyErrorHandler]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

نکاتی که بایستی به خاطر داشته باشید :

  1. از فیلترهای MVC Filter، برای اجرای یک سری دستورات و شرط های مورد نظر، قبل و بعد از اجرای یک متد اجرایی، استفاده می شود.
  2. انواع فیلترها در ASP.Net MVC به شرح زیر هستند :
    1. فیلترهای اهراز هویت کاربر (Authorization Filters)
    2. فیلترهای اجرایی )Action Filters)
    3. فیلترهای نتیجه گیری (Result Filters)
    4. فیلترهای رخدادهای استثناء (Exception Filters)

3) فیلترهای MVC را می توان در سه سطح عمومی، در حد کنترلر و یا در حد متد اجرایی اعمال نمود.
4) کلاس فیلترهای دلخواه را می توانید با ترکیب کلاس FilterAttribute و یک رابط کاربری متناسب، ایجاد نمایید.
در درس بعدی به آموزش کار با فیلترهای اجرایی (action Filters) خواهیم پرداخت.

1396/03/26 4531 1569
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...