مبانی فیلتر در MVC
چهارشنبه 23 اردیبهشت 1394در این مقاله اصول اولیه فیلتر ها و فیلتر هایی که غا لبا مورد استفاده قرار میگیرند توضیحی داده میشود مثل فیلتر های تشخیص هویت (Authorize) ، توابع بی نام (AllowAnonymous)، OutputCache، و ایجاد خطای دستی (HandleError)
در این مقاله اصول اولیه فیلتر ها و فیلتر هایی که غا لبا مورد استفاده قرار میگیرند توضیحی داده میشود مثل فیلتر های تشخیص هویت (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 ایجاد کند اجرا میشود.
- ASP.net MVC
- 2k بازدید
- 1 تشکر