پیاده سازی فیلتر های سفارشی با Session در Asp.Net.MVC
شنبه 6 تیر 1394فیلتر ها ویژگی است که به ما اجازه پیاده سازی منطق در طی مراحل مختلف و اجرای آن با کنترلر را میدهد لذا در این پارت ازآموزش قصد داریم به پیاده سازی یک فیلتر در MVC بپردازیم
فیلتر ها را میتوان به دورش اعمال کرد یا میتوان در کنترل به عنوان صفت ویا بالای هر متد از آن استفاده کنیم
چهار نوع فیلتر وجود دارد که هریک از آن ها با interface قابل پیاده سازی میباشد.
1: فیلتر Authorization با اینترفیس IAuthorizationFilter پیاده سازی میکنیم
2: فیلتر ACtion با اینترفیس IActionFilter قابل پیاده سازی است
3:فیلتر Result با اینترفیس IResultFilter قابل اجرا میباشد
4: فیلترException با اینترفیس IExceptionFilter قابل اجرا میباشد
در این آموزش قصدداریم فیلترAuthorization را با استفاده از Session پیاده سازی کنیم.
در مرحله اول ابتدا یک فولدر به نام Filter ایجاد کرده و یک کلاس به نام MyAuthoriztion داخل آن ایجاد میکنیم وهمچنین شما نیاز دارید که از اینترفیس IauthorizonFillter برای پیاده سازی رویداد OnAuthroization نیز استفاده کنیم
حال در کنترلر کد های زیر ا اضافه میکنیم
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MvcAuthorizeDemo.Filters; namespace MvcAuthorizeDemo.Controllers { public class AccountController : Controller { // // GET: /Account/ public ActionResult Index() { return View(); } public ActionResult Login() { Session["loggedin"] = true; return View(); } public ActionResult Logout() { Session.Abandon(); return View(); } [MyAuthorization] public ActionResult Protected() { return View(); } } }
همان طور که مشاهده میکنید یک متغیر ازSesstion به نام loggedin ایجاد میکنیم سپس در متدlogin برابر با True قرار میدهیم, سپس برای logout کردن از خاصیت abandon خود session استفاده میکنیم.
حال به پیاده سازی کلاس MyAuthorizationمیردازیم
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcAuthorizeDemo.Filters { public class MyAuthorizationAttribute : FilterAttribute, IAuthorizationFilter { public void OnAuthorization(AuthorizationContext filterContext) { var session = filterContext.HttpContext.Session; var isLoggedIn = Convert.ToBoolean(session["loggedin"]); if (!isLoggedIn) { filterContext.Result = new HttpUnauthorizedResult(); } } } }
در متد OnAuthorization ابتدا اطلاعات را از session میگریم سپس متغییر isLoggedIn به صورت bool ذخیره میکنیم
حال در زیر میتوان از کلاس MyAuthorizationبه عنوان یک صفت در کنترلر Home استفاده کرد.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MvcAuthorizeDemo.Filters; namespace MvcAuthorizeDemo.Controllers { [MyAuthorization] public class AccountController : Controller { // // GET: /Account/ [AllowAnonymous] public ActionResult Index() { return View(); } [AllowAnonymous] public ActionResult Login() { Session["loggedin"] = true; return View(); } public ActionResult Logout() { Session.Abandon(); return View(); } public ActionResult Protected() { return View(); } } }
نکته:صفت AllowAnonymous برای مواقعی استفاده میشود که میخواهید تمام کاربران به آن صفحه دسترسی داشته باشد
- ASP.net MVC
- 2k بازدید
- 6 تشکر