مبانی فیلتر در MVC

در این مقاله اصول اولیه فیلتر ها و فیلتر هایی که غا لبا مورد استفاده قرار میگیرند توضیحی داده میشود مثل فیلتر های تشخیص هویت (Authorize) ، توابع بی نام (AllowAnonymous)، OutputCache، و ایجاد خطای دستی (HandleError)

مبانی فیلتر در MVC

در این مقاله اصول اولیه فیلتر ها و  فیلتر هایی که غا لبا مورد  استفاده  قرار میگیرند توضیحی داده میشود  مثل فیلتر های تشخیص هویت  (Authorize) ، توابع بی نام (AllowAnonymous)، OutputCache، و ایجاد خطای دستی (HandleError)

فیلتر در MVC  جیست ؟ انها مانند صفات هستند

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

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

چرا ما نیاز به فیلتر ها داریم؟

گاهی اوقات شما نیاز دارید که  اعمالی رو قبل  یا بعد از انجام کاری اعمال کنید مثلا شما نیاز دارید که به کاربر اجازه  ورورد به بعضی از بخش های سایت رو بدون ورود بدید  و  بعضی از بخش های سایت رو با وارد شدن بدین یا  اکر کاربر نام کاربری را اشتیاه زد یک پیغام خطا بهش نمایش  بدید.

 سطح دسترسی در Mvc

یک پروژه  از توع  Mvc باز کنید

 یک کننترلر به نام   Home درست کنید که داخل آن دو متتد به نام های AllUser() و RestrictedUsers()  با  View های ان  بسازید .

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

قادر به دسترسی به  RestrictedUser نیستیم , و با صفحه خطا پیدا نکردن ویو کنترلر Account مواجه میشیم برای رفع این مشکل باید به صورت زیر عمل کنیم :

ویک متد Action در کنترلر Account برای فرستادن کاربر به صفحه login نه صفحه خطا مینویسیم:

مزایای استفاده از فیلتر چیست ؟

یک دلیل مهم جلوگیری از شکستن الگوی separation of concerns برای cross-cutting concerns .

چون cross-cutting concerns چون میتواند درون برنامه قبل یا بعد از هرعملی یا کنرلر که انجام میشود  اعمال شود بنابراین باید در یک محل مرکزی باشد.

یک فیلتر میتواند در سطح  یک اکشن یا کنترلر که برای همه اکشن های آن کنترلر اعمال شود همچنین شما میتوانید از چندین فیلتر استفاده کنید.

در مثال زیرنمایش چند فیلتر، فیلتر دیگری وجود  دارد که  صفحه را  به مدت 15 ثانیه کش میکند :

 

فیلتر مدیریت خطا:

روی مرورگر صفحه زیر را مشاهده خواهید کرد

خط زیر را در فایل webconfig اضافه کنید:


    <system.web>  
        <customErrors mode="On"></customErrors>  

و برای مدیریت خطا میتوانیم یک سطح عمومی برای متد یا سطح منترلر اعمال کنیم

سطح عمومی : در کلاس FilterConfig سطر زیر را بنویسید:

و در فایل Global.aspx.cs ثبت کنید:

سطح اکشن یا کنترلر:

در اینجا چهار نوع فیلتر وجود دارد:

1- Authorization : ابتدا قبل از هر فیلتر دیگری از اکشن متد اجرا میشود

2- Action : قبل و بعد از اکشن متد اجرا میشود.

3-Result : قبل و بعد از نتیجه عمل اجراشده اجرا میشود

4-Exception :اگر فیلتر دیگری ، اکشن متد یا نتیجه عملی یک exception  ایجاد کند اجرا میشود.

 

فایل های ضمیمه