این مقاله به شما کمک می کند تا بفهمید فیلترها در ASP.NET MVC چیست و چرا باید از آنها استفاده کنیم. قبل از رفتن به تعریف واقعی فیلترها، با نام اشتباه نشوید، قرار نیست داده های شما را از لیستی از داده ها فیلتر کند.
اساساً، فیلترها در ASP.NET MVC، منطق تجاری سفارشی پیش پردازش و پس از پردازش هستند که به ما کمک می کند تا داده های خود را درست قبل از اجرای یک عمل و درست بعد از اجرای یک عمل اضافه یا دستکاری کنیم. منطق Pre-Processing و Post-Processing در هیچ عملی نوشته نمی شود، فقط آن را در داخل فیلترها می نویسیم. ما میتوانیم از فیلترهایی برای ثبت جزئیات بازدیدکنندگان، دانستن اینکه چه کسی به وبسایت ما دسترسی دارد، یا برای برخی اطلاعات ثبتنام پس از اجرای یک عمل یا منطق احراز هویت/مجوز برای کاربر که اساساً بخشی از روش عمل ما نیست، استفاده کنیم.
این مقاله نشان می دهد که فیلترها چیست، چرا از آنها استفاده می کنیم و چگونه فیلترهای سفارشی را در ASP.NET MVC ایجاد کنیم. فیلترها را می توان به عنوان سطح کنترل کننده، سطح اقدام یا سطح جهانی تعریف کرد. برای تعریف آن در سطح کنترل کننده یا اکشن، باید از آن به عنوان یک ویژگی استفاده کنیم، درست مانند زیر.
برای تعریف فیلترها در سطح کنترلر، کافی است فیلتر را به عنوان یک ویژگی با یک کنترلر تزئین کنید.
- [CustomFilter]
- public class HomeController : Controller
برای تعریف فیلترهای خود در سطح اکشن، کافی است فیلتر را به عنوان یک ویژگی با متد Action تزئین کنید.
- [CustomFilter]
- public ActionResult Index()
برای تعریف فیلترهای خود در سطح جهانی، کافی است فیلتر را در یک شی GlobalFilterCollection در فایل FilterConfig.cs که در پوشه App_Start برنامه ASP.NET MVC قرار دارد، اضافه کنید.
- namespace FilterExample {
- public class FilterConfig {
- public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
- filters.Add(new HandleErrorAttribute());
- filters.Add(new CustomFilter());
- }
- }
- }
و این قبلاً در روش Application_Start در فایل Global.asax.cs ثبت شده است.
- public interface IAuthenticationFilter {
- void OnAuthentication(AuthenticationContext filterContext);
- void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext);
- }
انواع مختلفی از فیلترها در ASP.NET MVC بر اساس کاربرد آنها در چرخه عمر صفحه ASP.NET MVC موجود است که به شرح زیر است.
فیلتر احراز هویت
همانطور که از نام آن مشخص است، یک فیلتر احراز هویت است که برای احراز هویت کاربر معتبر در هنگام پردازش صفحه درخواستی استفاده می شود. این اولین فیلتری است که قبل از اجرای هر فیلتر دیگری اجرا می شود. این رابط IAuthenticationFilter را پیاده سازی می کند که دو روش را تعریف کرده است: OnAuthentication، که در زمان تأیید کاربر فراخوانی می شود. و OnAuthenticationChallenge، که پس از ناموفق بودن Authentication یا Authorization فراخوانی میشوند و یک متد اقدام قبل از نمایش شما فراخوانی میشود.
- public interface IAuthenticationFilter {
- void OnAuthentication(AuthenticationContext filterContext);
- void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext);
- }
فیلتر مجوز
این فیلتر زمانی فراخوانی می شود که مجوز لازم باشد. اساساً، دنباله فراخوانی این فیلتر درست بعد از فیلتر Authentication و درست قبل از فراخوانی یک فیلتر عمل است. برای مجوز دادن به کاربر با نقش خود استفاده می شود. به عنوان مثال ویژگی "Authorize" برای پیاده سازی فیلتر مجوز استفاده می شود. فیلتر مجوز رابط IauthorizationFilter را پیاده سازی می کند که تنها یک روش دارد که به عنوان "OnAuthorization" تعریف شده است که در زمان مجوز فراخوانی می شود.
- public interface IAuthorizationFilter {
- void OnAuthorization(AuthorizationContext filterContext);
- }
Action Filter
این فیلتر زمانی که مجبور به انجام برخی منطق های پیش یا پس از پردازش با اجرای متد عمل هستیم واقعا مفید است. بله، فیلتر اکشن قبل از اجرای یک متد اکشن و بعد از اجرای یک متد اکشن فراخوانی می شود. فیلتر اکشن رابط IactionFilter را پیاده سازی می کند که دارای دو روش OnActionExecuted و OnActionExecuting است. متد OnActionExecuting درست قبل از فراخوانی متد اکشن و متد OnActionExecuted درست بعد از فراخوانی متد اکشن فراخوانی می شود.
- public interface IActionFilter {
- void OnActionExecuted(ActionExecutedContext filterContext);
- void OnActionExecuting(ActionExecutingContext filterContext);
- }
فیلتر نتیجه
شبیه به فیلتر عمل است و برای اصلاح نمای شما قبل از رندر کردن یا اجرای برخی منطق سفارشی اضافی درست پس از رندر کردن View استفاده می شود. بنابراین، به این معنی است که عمدتاً برای نتیجه شما استفاده می شود که می خواهید در View ارائه دهید. این رابط IresultFilter را پیاده سازی می کند که دارای دو روش مشابه ActionFilter به عنوان OnResultExecuted است که بلافاصله پس از ایجاد نتیجه شما فراخوانی می شود و OnResultExecuting که درست قبل از اعلام نتیجه شما فراخوانی می شود. به عنوان مثال، یک فیلتر Result داخلی وجود دارد که با استفاده از ویژگی "OutputCache" استفاده می شود که برای ذخیره پاسخ صفحه شما استفاده می شود.
- public interface IResultFilter {
- void OnResultExecuted(ResultExecutedContext filterContext);
- void OnResultExecuting(ResultExecutingContext filterContext);
- }