چگونه از فیلترهای اکشن در ASP.NET استفاده کنیم

دوشنبه 25 شهریور 1398

استفاده از فیلترهای اکشن در ASPNET می تواند مزایای بسیار زیادی برای شما داشته باشد، در این مطلب نحوه کار کردن با فیلترهای اکشن را توضیح می دهیم.

 چگونه از فیلترهای اکشن در ASP.NET استفاده کنیم

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

به عنوان مثال شما می توانید فیلترهای اکشن را در ASP.NET اعمال کنید تا  به این شکل بتوانید کدهای شخصی سازی شده را قبل و یا بعد از اجرای یک متد اکشن اجرا کنید. در این مقاله قصد داریم درباره فیلترهای built-in در ASP.NET صحبت کنیم و به این موضوع بپردازیم که چرا آن ها مفید هستند و همینطور درباره این که چطور ما می توانیم از فیلترهای اکشن در اپلیکیشن هایی که با استفاده از ASP.NET نوشته شده اند استفاده کنیم.


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

به صورت کلی ASP.NET دارای فیلترهای داخلی بسیار زیادی است که این فیلترها شامل موارد زیر می باشند:

فیلترهای action: این فیلترها قبل و یا بعد از اجرای یک متد اکشن از یک کنترلر اجرا می شوند.

فیلترهای مجوز: این فیلترها معمولا در شروع یک درخواست پیپ لاین اجرا می شوند. آن ها برای تایید هویت کاربر و این که آیا کاربر دارای مجوز است یا نه مورد استفاده قرار می گیرند.

فیلترهای Resource: این فیلترها بعد از تایید مجوزها و قبل از متصل کردن مدل مورد استفاده قرار می گیرند. شما می توانید از مزایای استفاده از این فیلترها برای پیاده سازی کش بهره مند شوید.

فیلترهای Result: این فیلترها برای اجرای کد قبل و یا بعد از یک متد اکشن از IActionResult  که در حال اجرا است مورد استفاده قرار می گیرند.

فیلترهای Exception: این فیلترها برای مدیریت تمامی exception هایی که در یک پیپ لاین اتفاق می افتند استفاده می شوند. شما می توانید از مزایای استفاده از این فیلترها برای اجرای کدهای شخصی سازی شده زمانی که یک exception رخ می دهد استفاده کنید.

 فیلترهای اکشن


نکاتی مهم درباره این فیلترها و فیلترهای اکشن

انتخاب نوع فیلتری که استفاده می کنید بستگی به هدفی دارد که شما قصد دارید به آن منظور  از این فیلترها استفاده کنید. به عنوان مثال اگر شما قصد داشته باشید یک اتصال کوتاه را برقرار کنید( یک متد اکشن را متوقف کرده و نتیجه را به سرعت باز گردانید) شما باید از فیلتر resource استفاده کنید. از طرف دیگر اگر شما قصد داشته باشید که پارامترهای متد اکشن را تغییر دهید و نتیجه را از متد اکشن باز گردانید شما باید از فیلترهای اکشن استفاده کنید. کلاس ActionFilterAttribute اینترفیس های IActionFilter، IAsyncActionFilter، IResultFilter، IAsyncResultFilter و Ordered Filter را implement می کند. شما می توانید از مزایای استفاده از این کلاس برای پیاده سازی یک فیلتر متد، فیلتر کنترل کننده و یا یک فیلتر گلوبال بهره مند شوید. ما این مورد را در ادامه این مقاله به صورت کامل توضیح خواهیم داد.

 فیلترهای اکشن


ساخت یک پروژه ASP.Net Core Web API در ویژوال استودیو

در ابتدا برای یادگیری استفاده از فیلترهای action ما باید یک پروژه را در ASP.Net بسازیم که این کار را در IDE ویژوال استودیو انجام می دهیم. اگر نسخه 2017 ویژوال استودیو در سیستم شما نصب شده و اجرا می شود گام های زیر را طی کنید تا بتوانید با موفقیت این پروژه را برای کار کردن با فیلترهای action در ASP.NET بسازید:

1-      IDE ویژوال استودیو نسخه 2017 را اجرا کنید.

2-      مسیر File > New > Project را طی کنید.

3-      در لیستی که برای شما ظاهر می شود بر روی گزینه “ASP.Net Core Web Application (.Net Core)” کلیک کنید.

4-      یک نام را برای پروژه خود انتخاب کنید.

5-      بر روی گزینه OK کلیک کنید تا پروژه شما ذخیره شود.

6-      در صفحه جدید عبارت “New .Net Core Web Application…” برای شما ظاهر خواهد شد.

7-      گزینه .Net Core را به عنوان ران تایم انتخاب کنید و از روی لیستی که برای شما ظاهر می شود گزینه ASP.Net Core 2.1 (or later) را انتخاب کنید.

8-      گزینه “Web Application (Model-View-Controller)” را به عنوان قالب پروژه خود انتخاب کنید.

9-      اطمینان حاصل کنید که چک باکس های “Enable Docker Support” و “Configure for HTTPS” تیک نداشته باشند چرا که ما نمی خواهیم از این ویژگی ها استفاده کنیم.

10-  اطمینان حاصل کنید که گزینه “No Authentication” انتخاب شده باشد.

با استفاده از این مراحل شما می توانید پروژه خود را برای استفاده از فیلترهای action ایجاد کنید، ما از این پروژه برای پیاده سازی فیلترهای اکشن خودمان استفاده خواهیم کرد.

 فیلترهای اکشن


ساخت فیلترهای اکشن شخصی سازی شده در ASP.NET

شما می توانید از مزایای ساخت فیلترهای action شخصی سازی شده برای اجرای کدهای قابل استفاده مجدد قبل و بعد از اجرای یک متد اکشن استفاده کنید. شما می توانید کلاس های Abstract زیر را extend کنید تا به این شکل بتوانید فیلترهای اکشن شخصی سازی شده بسازید. توجه داشته باشید که هر یک از این کلاس های Abstract از کلاس Attribute ارث برده شده اند.

-          ActionFilterAttribute

-          ResultFilterAttribute

-          ExceptionFilterAttribute

-          ServiceFilterAttribute

-          TypeFilterAttribute

شما همچنین می توانید از اینترفیس IActionFilter نیز ارث بری کنید و متدهای آن را پیاده سازی کنید تا به این شکل بتوانید فیلترهای اکشن را شخصی سازی کنید. نکته دیگر این است که شما می توانید هر دو نوع فیلترهای synchronous و synchronous را به این شکل بسازید.

 فیلترهای اکشن


ساخت فیلترهای اکشن synchronous در ASP.NET

قطعه کد زیر به شما نشان می دهد که چگونه فیلترهای اکشن synchronous با ارث بری از اینترفیس IActionFilter و پیاده سازی متدهای OnActionExecuting و OnActionExecuted ساخته می شوند.

public class SimpleActionFilter : IActionFilter

    {

       public void OnActionExecuting(ActionExecutingContext context)

       {

           //this method will be executed before the execution of an action method

        }

       public void OnActionExecuted(ActionExecutedContext context)

       {

           //this method will be executed after an action method has executed

       }

    }

 فیلترهای اکشن


ساخت یک فیلتر اکشن asynchronous در ASP.Net

برای ایجاد فیلترهای اکشن asynchronous شما باید از اینترفیس IAsyncActionFilter ارث بری کنید و متد OnActionExecutionAsync را  همانطور که در ادامه نشان داده شده است پیاده سازی کنید.


public class SimpleAsyncActionFilter : IAsyncActionFilter

    {

       public async Task OnActionExecutionAsync(ActionExecutingContext context,

         ActionExecutionDelegate next)

       {

           //code written here will be executed before the execution of an action method

           await next();

           //code written here will be executed after the execution of an action method

       }

    }

 فیلترهای اکشن


اضافه کردن فیلتر اکشن به ConfigureServices در ASP.NET

شما می توانید فیلترهای action را در سطوح مختلف دامنه اضافه کنید، این دامنه ها شامل سطح اکشن، سطح کنترل کننده و سطح گلوبال می باشد. قطعه کد زیر نشان می دهد که شما چگونه می توانید یک فیلتر را در سطح گلوبال اضافه کنید. توجه داشته باشید که فیلترهای اکشن شخصی سازی شده که ما در قسمت بالا پیاده سازی کردیم به مجموعه فیلترها در متد ConfigureServices در کلاس Startup اضافه شده اند. نکته دیگری که باید به آن توجه داشته باشید این است که این فیلترهای اکشن در واقع با نمونه گیری به این مجموعه اضافه شده اند.

services.AddMvc(options =>

           {

               options.Filters.Add(new SimpleAsyncActionFilter());

            }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

شما همچنین می توانید این فیلترهای اکشن را به عنوان یک نوع اضافه کنید که در ادامه قطعه کد مربوط به این بخش را نیز آورده ایم:

services.AddMvc(options =>

           {

               options.Filters.Add(typeof (SimpleAsyncActionFilter));

            }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

ایمان مدائنی

نویسنده 1299 مقاله در برنامه نویسان
  • C#.net
  • 1k بازدید
  • 2 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید