public class ExceptionFillters : FilterAttribute, IExceptionFilter { public void OnException(ExceptionContext filterContext) { throw new System.NotImplementedException(); } } public class ActionFillters : FilterAttribute, IActionFilter { public void OnActionExecuted(ActionExecutedContext filterContext) { if (filterContext.RequestContext.HttpContext.Session == null) return; var token = filterContext.RequestContext.HttpContext.Session["userId"]; if (token == null) { filterContext.RequestContext.HttpContext.RedirectLocal("/Role/LoginHome"); } //執行action后執行這個方法 比如做操作日志 } public void OnActionExecuting(ActionExecutingContext filterContext) { //執行action前執行這個方法,比如做身份驗證 } } public class ResultFillters : FilterAttribute, IResultFilter { public void OnResultExecuted(ResultExecutedContext filterContext) { //執行完action后跳轉后執行 } public void OnResultExecuting(ResultExecutingContext filterContext) { //執行完action后跳轉前執行 } }
實現這幾個方法后
在控制器中的視圖方法上加入
[ResultFillters] [ActionFillters] [ExceptionFillters] public ActionResult Index(int currentPageIndex = 1) { return View(); }
這就實現了攔截,未登錄的用戶,session為null是跳到登錄頁面