با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش ASP.NET MVC ، را دنبال می کنند. تاکنون با مباحث مقدماتی فیلترهای ASP.NET MVC آشنا شدید، در ادامه ی این مباحث و در این بخش، ما قصد داریم شما را با مبحث Action filter (فیلترهای اجرایی) آشنا کنیم. فیلترهای اجرایی در ASP.NET MVC می توانند قبل یا بعد از یک متد اجرایی اجرا شوند. ویژگی های Action filter در ASP.NET MVC را می توان به یک متد اجرایی یا کنترلر اعمال کرد، در ادامه ی مباحث شما را با فیلترهای اجرایی در ASP.NET MVC آشنا خواهیم کرد.
هنگامی یک Action filter در ASP.NET MVC به یک کنترلر اعمال شود. این ویژگی به تمام متدهای اجرایی همان کنترلر نیز اعمال می شود.
OutputCache یک ویژگی فیلتر درونی ساخته شده است که می تواند به یک متد اجرایی اعمال شود که ما می خواهیم خروجی را ذخیره کنیم. برای مثال، خروجی متد اجرایی زیر برای ۱۰۰ ثانیه ذخیره می شود:
1 2 3 4 5 | [OutputCache(Duration=100)] public ActionResult Index() { return View(); } |
شما می توانید یک فیلتر سفارشی برای برنامه ی خود ایجاد کنید.
شما با دو روش می توانید فیلتر سفارشی ایجاد کنید.
در روش اول باید IActionFilter interface و کلاس FilterAttribute را پیاده سازی کنید.
روش دوم با برداشتن چکیده ی ActionFilterAttribute انجام می شود.
رابط کاربری IActionFilter شامل دو متد برای پیاده سازی می شود:
کلاس چکیده ی ActionFilterAttribute نیز شامل متدهای زیر می شود:
همانطورکه که مشاهده می کنید کلاس ActionFilterAttribute شامل چهار روش برای بارگزاری می شود.
این شامل روش OnResultExecuted و OnResultExecuting است که می تواند برای اجرای منطق سفارشی قبل یا بعد از نتیجه اجرا شود.
فیلترهای اجرایی معمولا برای اعمال پیچیده مانند ورود به سیستم، ذخیره سازی، مجوز و غیره استفاده می شود.
در مثال زیر ما از کلاس Log filter برای عمل logging استفاده می کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | public class LogAttribute : ActionFilterAttribute { public override void OnActionExecuted(ActionExecutedContext filterContext) { Log("OnActionExecuted", filterContext.RouteData); } public override void OnActionExecuting(ActionExecutingContext filterContext) { Log("OnActionExecuting", filterContext.RouteData); } public override void OnResultExecuted(ResultExecutedContext filterContext) { Log("OnResultExecuted", filterContext.RouteData); } public override void OnResultExecuting(ResultExecutingContext filterContext) { Log("OnResultExecuting ", filterContext.RouteData); } private void Log(string methodName, RouteData routeData) { var controllerName = routeData.Values["controller"]; var actionName = routeData.Values["action"]; var message = String.Format("{0}- controller:{1} action:{2}", methodName, controllerName, actionName); Debug.WriteLine(message); } } |
همانطور که مشاهد می کنید کلاس Log از کلاس ActionFilterAttribute مشتق می شود. این Log قبل یا بعد از یک متد اجرای یا نتیجه اجرا می شود.
شما می توانید ویژگی Log را به هر کنترلر یا متدهای اجرایی زمانیکه می خواهید وارد عمل شوید اعمال کنید.
برای مثال، با اعمال ویژگی log به کنترلر، این وارد تمام متدهای اجرایی یک کنترلر می شود:
مثال- اعمال فیلتر Log به کنترلر:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [Log] public class StudentController : Controller { public ActionResult Index() { return View(); } public ActionResult About() { return View(); } public ActionResult Contact() { return View(); } } |
در مثال فوق، خروجی زیر را در پنجره ی خروجی Visual Studio در مسیر http://localhost/student
نمایش می دهد:
برای استفاده از Action filter در ASP.NET MVC نکات زیر را به خاطر بسپارید:
۱- فیلترهای اجرایی اجازه می دهند منطق پیش و پس از پردازش به یک متد اجرایی اعمال شود.
۲- متدهای اجرایی عموما برای اعمالی مانند ورود به سیستم، ذخیره سازی، مجوز و غیره بکار می رود.
۳- فیلترهای اجرایی می تواند به عنوان فیلترهای دیگر در سطح عمومی ، کنترلر یا سطح متد اجرایی اعمال شود.
۴- فیلترهای اجرایی سفارشی را می توان با کلاس ActionFilterAttribute یا با پیاده سازی کلاس IActionFilter interface و FilterAttribute ایجاد کرد.
۵- هر متد اجرایی باید روی متدهای OnActionExecuted, OnActionExecuting, OnResultExecuted, OnResultExecuting لغو شود.
در ادامه ی مباحث فیلترهای MVC در این بخش نیز به آموزش فیلترهای اجرایی در ASP.NET MVC پرداختیم. و مباحث فیلتر را با ارائه ی Action filter در ASP.NET MVC تمام کردیم. در فصل بعدی نیز به مبحث Bundling خواهیم پرداخت.