درک فیلترها در ASP.net MVC

چهارشنبه 25 آذر 1394

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

 درک فیلترها در ASP.net MVC

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

Authentication filters

 فیلترهای احراز هویت افزونه های جدیدی برای  MVC 5  هستند. این فیلترها در چرخه زندگی درخواست ها مشارکت میکنند و منطق احراز هویت را اجرا میکنند.

Authorization filters

فیلترهای Authorization  بعد از آنکه فیلترهای Authentication با موفقیت انجام شدند و کاربر به درستی احرازهویت شد اجرا می شوند .

Action filters

فیلترهای  Action  بعد از چرخه زندگی درخواست اجرا می شوند و هر منطقی را که بخواهیم قبل یا بعد از اجرای action انجام شود اجرا میکند .

Result filters

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

Exception filters

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

تصویر زیر چرخه اجرایی فیلترها را نشان می دهد.

همانطور که میبینید کنترلر هنگام فراخوانی action شروع به کار میکند ، فیلترهای Authentication و Authorization اولین فیلترهایی هستند که با توجه به اتصالات مدل و مسیر دهی داده ها به پارامترهای  Action شروع به کار میکنند. OnActionExecuting قبل از اجرای Action  و  OnActionExecuted   بعد از آنکه اجرای متد Action پایان یافت راه اندازی می شوند. پس از آن فیلترهای  Result هستند که قبل از اجرا شدن آن  OnResultExecuting و پس از آنکه فیلتر Result  اجرا شد  OnResultExecuted  راه اندازی می شوند. فیلترهای  Exception ، فیلترهای مخصوصی هستند که هنگام وقوع یک استثنا سریعا راه اندازی می شوند و می توانید منطق سفارشی خود را در log exception  یا صفحه  Error  که هنگام وقوع استثنا کاربر به آن تغییر مسیر می دهد بنویسید .

 

فیلترها در Action

مانند هر چرخه زندگی رویدادی در  MVC ، پیاده سازی فیلترها در MVC بسیار آسان است.

فیلترهای  Authentication  

فیلترهای  Authentication  یکی از امکانات جدید  MVC 5  است که به تازگی اضافه شده است.  راهی وجود ندارد که قادر باشید آن را در برنامه های قدیمی خود پیاده سازی کنید. از این فیلتر برای احراز هویت می توانید استفاده کنید. در چرحه زندگی درخواست ، هنگامی که ماژول  مسیردهی URL  انتخاب شد ، مسیر و کنترلر مقداردهی  شدند ، اولین چیزی که در اجرای متد  Action  اتفاق می افتد ، فیلتر  Authentication  است.  

برای پیاده سازی فیلتر  Authentication ابتدا باید اینترفیس  IAuthenticationFilter با مشتق شدن از کلاس پایه  FilterAttribute پیاده سازی شود. در اینجا کلید  IAuthenticationFilter است که امکان پیاده سازی دو متد  OnAuthentication و  OnAuthenticationChallenge   را می دهد.  OnAuthentication  خصوصا برای تنظیم کردن هویت اصلی و یا هر نوع از  Authentication که برای برنامه شما قابل درک باشد استفاده می شود و OnAuthenticationChallenge    متد مخصوصی است که درست قبل از انجام شدن نتیجه،  اجرا می شود و برای اضافه کردن یک چالش به نتیجه قبل از نمایش داده ان به کاربر استفاده می شود.

چگونگی پیاده سازی آن در تصویر زیر نشان داده شده است.

فیلترهای  Action

این فیلترها قبل و بعد از یک متد اجرا می شوند، برای پیاده سازی این فیلترها ابتدا باید اینترفیس  IActionFilter با مشتق شدن از کلاس پایه  FilterAttribute پیاده سازی شود. IActionFilter نیز متدهای  OnActionExecuting   برای اجرا قبل از Action و OnActionExecuted پس از اجرای  Action را پیاده سازی میکند.

فیلترهای Authorization 

این فیلترها برای اجرای احراز هویت استفاده می شوند. برای پیاده سازی این فیلتر نیز به یک اینترفیس  IAuthorization که از کلاس پایه FilterAttribute  مشتق می شود . این فیلتر یک متد  OnAuthorizationبرای چک کردن مجوز در اختیار ما قرار می دهد. و پیاده سازی آن به صورت زیر است.

فیلترهای Result

فیلترهایی هستند که قبل و بعد از اجرای نتیجه به یک درخواست  Http خاص بکار می روند . برای سفارشی کردن فیلتر  Result  اینترفیس  IResultFilter  پیاده سازی می شود که از کلاس پایه  FilterAttribute  مشتق شده است.

فیلترهای  Exception

فیلترهای مخصوصی هستن که هنگام وقوع یک استثنا اجرا می شوند. می توانید از این فیلتر برای Catch کردن استثناهایی که اتفاق می افتند استفاده کنید که آنها را در یک فایل سیستمی  یا دیتابیس ذخیره کند و سپس کاربر را به یک صفحه خطا راهنمایی کند یا هر عمل دیگری را که مناسب نیاز شماست انجام دهد . برای سفارشی کردن این فیلتر نیز از یک اینترفیس که از کلاس پایه  FilterAttribute  مشتق می شود با نام  IExceptionFilter استفاده می شود.

پس از سفارشی کردن فیلترهای خود ،  در فریم ورک  MVC فیلترهای خود را در ارتباط با چرخه زندگی درخواست ها قرار دهید. به این روند ، ثبت فیلترها در چرخه زندگی  MVC می گویند .

ثبت فیلترها می تواند از دو طریق انجام شود. اولی قرار دادن آنها به عنوان کنترلر یا صفت های عملیات است ، اما باید در نظر داشته باشید که آن را در همه کنترلر ها یا عملیات ها قرار دهید. راه دیگر ثبت آنها در یک سطح سراسری است که با این روش اطمینان دارید که برای همه کنترلر ها و عملیات ها اجرا خواهند شد. برای راه دوم به  Global.asax.csرفته و زیر رویداد  Application_start فیلترهای سفارشی خود را ثبت کنید.

 

 

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

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

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