همانطور که در مباحث قبلی اشاره کردیم، در چهارچوب کاری ASP.Net MVC، کنترلرها، متدهای اجرایی (action method) را تعیین کرده که معمولا رابطه ای یک به یک (one to one relationship) را با درخواست های کاربر دارند. اما گاهی اوقات می خواهید کدها یا شرایطی را تعیین کنید که قبل از فراخوانی یک متد و یا پس از اجرای آن، اجرا شوند. برای پشتیبانی از این قابلیت، چهارچوب کاری ASP.Net MVC، فیلتر Filter را ارائه کرده است. فیلترها (Filters) در MVC، کلاس هایی هستند که هم توانایی تعیین شروط و هم توانایی کدنویسی را جهت اضافه کردن دستورات قبل اجرای متد (Pre-action) و یا دستورات پس از اجرای متد (Post-action) را به متدهای اجرایی کنترلر، دارا هستند. به عبارت ساده تر، توسط فیلترها (Filters) در MVC، می توانید دستورات یا شروطی را تعیین کنید که از فراخوانی یک متد و یا پس از اجرای آن، اجرا شوند.
یک فیلتر اجرایی (action Filter)، خاصیتی است که می توانید به یک متد کنترلر یا کل کنترلر، اعمال نموده و نحوه اجرای آن را تغییر دهید. چهارچوب کاری ASP.Net MVC، شامل چندین فیلتر اجرایی است که عبارتند از : فیلتر OutputCache : این فیلتر خروجی (output) یک کنترلر را برای مدت معینی در حافظه نگهداری (cache) می کند. فیلتر HandleError : فیلتر مدیریت کننده خطا (Handle error) زمانی فراخوانی می شود که متد یا action تعیین شده، اجرا شود. فیلتر Authorize : از این فیلتر برای محدودسازی دسترسی یک کاربر یا قاعده خاص به یک متد اجرایی یا یک کنترلر استفاده می شود.
چهارچوب کاری MVC، از چهار نوع مختلف فیلتر به صورت زیر پشتیبانی می کند : فیلتر Authorization Filters : این فیلتر خاصیت IAuthorizationFilter را اعمال می کند. فیلتر Action Filters : این فیلتر خاصیت IActionFilter را اعمال می کند. فیلتر result Filters : این فیلتر خاصیت IResultFilter را اعمال می کند. فیلتر Exception Filters : این فیلتر خاصیت IExceptionFilter را اعمال می کند.
مرحله 1 : برنامه ویژوال استودیو را باز کرده و گزینه های File، New Project را به ترتیب کلیک نموده تا پنجره زیر، جهت ایجاد یک پروژه جدید MVC باز شود :
مرحله 2 : از پنل سمت چپ، از بخش Templates، گزینه های C# و Web را به ترتیب انتخاب کنید. مرحله 3 : در پنل وسط، گزینه ASP.Net Web Application را انتخاب کنید. مرحله 4 : در قسمت نام پروژه (Name)، عبارت MVCFiltersDemo را وارد کرده و جهت ادامه، دکمه ok را بزنید. خواهید دید پنجره زیر جهت تعیین محتوی اولیه پروژه ASP.Net MVC باز خواهد شد :
مرحله 5 : برای اینکه کار ساده تر باشد، گزینه Empty را جهت ایجاد یک پروژه خالی MVC انتخاب کنید. همچنین تیک گزینه MVC را در بخش Add folders… علامت زده تا پوشه ها و فایل های اصلی پیش فرض MVC به سایت اضافه شوند. عملیات فوق یک پروژه جدید MVC را با حداقل محتوی لازم، ایجاد می کند. مرحله 6 : برای اضافه کردن یک کنترلر جدید به پروژه، بر روی پوشه Controller در منوی Solution Explorer کلیک راست کرده و گزینه های Add و Controller را بزنید. پنجره add Scaffold به صورت زیر باز می شود :
مرحله 7 : از کادر فوق، گزینه MVC 5 Controller-Empty را انتخاب کرده و دکمه add را بزنید. کادر Add Controller به صورت زیر باز خواهد شد :
مرحله 8 : نام کنترلر را HomeController تعیین نموده و دکمه Add را بزنید. ویژوال استودیو یک فایل جدید C# به نام “HomeController.cs” را به پوشه Controllers اضافه کرده و آن ها را جهت ویرایش، برایتان باز می کند.
یک فیلتر اجرایی (action filter) را می توانید به یک متد کنترلر (action) و کل کنترلر، اعمال نمایید. برای مثال، در کد فایل زیر یک فیلتر اجرایی OutputCache به متد اجرایی Index() که یک مقدار متنی (string) را بر می گرداند، اعمال شده است. این فیلتر باعث می شود، مقدار برگشتی متد Index برای مدت 15 ثانیه در حافظه ذخیره یا Cache شود. برای اعمال فیلتر اشاره شده، کد متد Index() را به صورت زیر تغییر دهید :
حال بیایید متد اجرایی (action method) دیگری را که زمان جاری سرور را نمایش می دهد، به صورت زیر به کنترلر اضافه کنیم :
اگر آدرس http://localhost:62833/Home/GetCurrentTime را در مرورگر درخواست نمایید، خروجی زیر را دریافت خواهید کرد :
اگر مجددا مرورگر را رفرش کنید، چون زمان نمایش داده شده قبلی را مشاهده خواهید کرد (نه زمان جدید)، زیرا خروجی action به مدت 20 ثانیه در حافظه Cache شده است. این زمان پس از سپری شدن 20 ثانیه، به روز خواهد شد.