دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۶
  • شهریور

جلسه ۳۵ : فیلترها در ASP.NET MVC

  • دسته‌بندی‌ها :
جلسه ۳۵ : فیلترها در ASP.NET MVC
    • جزئیات
    • نوع محتواآموزش تصویری

      مقدمه

      با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش ASP.NET MVC ، را دنبال می کنند. در ASP.NET MVC درخواست کاربر به کنترلر مناسب و متد اجرایی هدایت می شود. با این وجود ممکن است شما بخواهید بعضی از قسمت ها را قبل یا بعد از یک متد اجرایی ، اجرا کنید. برای این منظور ASP.NET MVC فیلترهای مناسب را معرفی می کند. برای آشنایی با کاربرد و چگونگی استفاده از  کلاس سفارشی ASP.NET MVC Filter یا فیلترها در ASP.NET MVC در ادامه ی مباحث با ما همراه باشید.

      فیلترها در ASP.NET MVC

      ASP.NET MVC Filter یک کلاس سفارشی است که در آن شما می توانید بخش هایی را برای اجرای قبل یا بعد از یک متد اجرایی مشخص کنید.

      فیلترها در ASP.NET MVC Filter را می توان به یک متد اجرایی یا کنترلر و یا یک برنامه اعمال کرد.

      فریم ورک MVC شامل انواع مختلفی از فیلترها می شود.

      جدول زیر لیستی از فیلترهای MVC را نشان می دهد، فیلترهای built-in برای نوع و رابط کاربری که باید برای ایجاد کلاس فیلتر، پیاده سازی شود بکار می رود.

      Filter TypeتوضیحاتBuilt-in FilterInterface
      Authorization filtersقبل از اجرای متد اجرایی، احراز هویت و مجوز را انجام می دهد.[Authorize], [RequireHttps]IAuthorizationFilter
      Action filtersبعضی از عملیات قبل و بعد از انجام یک متد اجرایی انجام می شود.IActionFilter
      Result filtersبعضی از عملیات قبل یا بعد از اجرای نمایش را انجام می دهند.[OutputCache]IResultFilter
      Exception filtersبعضی از عملیات ها را انجام می دهند[HandleError]IExceptionFilter

      یک فیلتر استثنایی زمانی اجرا خواهد شد که یک استثنای ناامن در برنامه ی شما وجود داشته باشد.

      کلاس HandleError یک کلاس فیلد استثنایی ساخته شده در چارچوب MVC است.

      فایل Error.cshtml بطور پیش فرض در فولدر Shared قرار گرفته است.

      مسیر فایل Error.cshtml

      مثال زیر فیلتر HandError را نشان می دهد:

      مثال : 

      در مثال فوق ما ویژگی [HandleError] را به HomeController اعمال کرده ایم.

      بنابراین حالا اگر هیچ متد اجرایی از HomeController به استثنای unhandled اجرا نشود، صفحه ی Error نمایان می شود.

      لطفا توجه کنید که استثنای unhandled با بلاک try-catch تغییر نمی کند.

      فیلترهایی که به کنترلر اعمال می شوند، بصورت خودکار به تمام متدهای اجرایی یک کنترلر اعمال می شوند.

      لطفا مطمئن شوید که حالت CustomError در بخش System.web از web.config قرار دارد تا HandleErrorAttribute به درستی کار کند:

      مثال:

      مثال : 

      حالا اگر شما برنامه را اجرا کنید ، یک صفحه ی خطا را مشاهده خواهید کرد. چراکه ما از متد اجرایی Index برای اهداف آزمایشی استفاده کردیم.

      اجرای آزمایشی

      بنابراین ویژگی HandleError صفحات عمومی خطا را برای هر استثنای دستکاری نشده در HomeController نمایش می دهد.

      فیلترهای ریجستر

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

      ۱- global level (سطح عمومی)

      شما می توانید فیلترها ی سطح عمومی را در رویداد Application_Start از فایل Global.asax.cs اعمال کنید.

      با استفاده از فایل پیش فرض FilterConfig.RegisterGlobalFilters()  فیلترهای عمومی به تمام کنترلرها و متدهای اجرایی یک برنامه اعمال می شود.

      فیلتر [HandleError] بصورت پیش فرض در هر برنامه ی MVC با استفاده از Visual Studio اعمال می شود:

      مثال : 

      ۲- Controller level (سطح کنترلر)

      فیلترها می توانند همچنین به کلاس کنترلر اعمال شوند. بنابراین، فیلترها در صورتی که به یک کلاس کنترلر اعمال شوند، به تمام متدهای اجرایی کلاس کنترلر نیز، اعمال می شود.

      مثال – فیلترهای اجرایی در کنترلر :

      مثال : 

      ۳- Action method (سطح متد اجرایی)

      شما می توانید فیلترها را به یک متد اجرایی شخصی نیز اعمال کنید. در این صورت فیلترها فقط در همان متد اجرایی خاص قابل اجرا خواهند بود.

      مثال- فیلترها در متد اجرایی :

      مثال : 

      شما می توانید چندین فیلتر داخلی یا سفارشی را در سطح عمومی یا در سطح کنترلرها یا متداجرایی برای اهداف مختلف مانند [مجاز]، [RequireHttps]، [ChildActionOnly]، [OutputCache]، [HandleError] استفاده کنید.

      فیلتر سفارشی

      همانطور که در بالا ذکر شد، MVC شامل انواع مختلفی از فیلترها می باشد و چندین فیلتر را می توان به یک کلاس کنترلر یا متداجرایی اعمال کرد. بنابراین، فیلترها در دستور زیر اجرا می شوند.

      1. Authorization filters
      2. Action filters
      3. Response filters
      4. Exception filters

      ایجاد فیلتر سفارشی

      با اجرای یک رابط فیلتر مناسب که می توانید یک فیلتر سفارشی ایجاد کنید.

      می توانید ویژگی های فیلتر سفارشی را ایجاد کنید.

      همچنین یک Class Filter Attribute را ایجاد کنید تا بتوانید از آن کلاس به عنوان یک ویژگی استفاده کنید.

      برای مثال از پیاده سازی کلاس IExceptionFilter و FilterAttribute برای ایجاد فیلتر سفارشی استفاده می کنیم.

      به همان شیوه یک رابط کاربری IAuthorizatinFilter و FilterAttribute را برای ایجاد فیلتر سفارشی اجرا کنید:

      مثال : 

      به علاوه، شما همچنین می توانید یک کلاس فیلتر داخلی را ایجاد کرده و یک متد مناسب برای گسترش قابلیت فیلترهای داخلی را لغو کنید.

      در مثال زیر یک فیلتر سفارشی ایجاد خواهیم کرد تا هر استثنای غیر قابل تغییر را با کلاس HandleError و متد OnException وارد کنیم:

      مثال : 

      حالا می توانید ویژگی MyErrorHandler را به سطح عمومی یا کنترلر یا سطح متد اجرایی اعمال کنید، با این روشها ما ویژگی HandleError را اعمال می کنیم.

      مثال- اعمال فیلتر سفارشی به کنترلر:

      مثال : 

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

      ۱- فیلترهای MVC برای اجرای بخش هایی قبل یا بعد از اجرای متد اجرایی بکار می رود.

      ۲- انواع فیلترهای MVC :

      1. Authorization filters
      2. Action filters
      3. Result filters
      4. Exception filters

      ۳- فیلترها می توانند بصورت عمومی در کلاس FilterConfig ، سطح کنترلر یا متد اجرایی اعمال کرد.

      ۴- کلاس فیلترهای سفارشی را می توان با پیاده سازی کلاس FilterAttribute و رابط کاربری متناظر اعمال کید.

      کلام آخر

      مباحث فوق نمونه هایی از کاربردهای فیلترها در ASP.NET MVC را به شما نشان می دهد. با استفاده از این فیلترها می توانید کدهایی را قبل یا بعد از اجرای متدهای اجرایی برنامه، اجرا کنید. در بخش بعدی ما به آموزش فیلترهای اجرایی در  ASP.NET MVC می پردازیم.

      QR:  جلسه ۳۵ : فیلترها در ASP.NET MVC
      به اشتراک بگذارید