Asp.Net MVC过滤器
在MVC中有如下过滤器
1.AuthorizeAttribute
2.ActionFilterAttribute
3.HandleErrorAttribute
一、首先介绍AuthorizeAttribute,这个就是授权过滤器
1.创建一个类,继承AuthorizeAttribute
2.重写OnAuthorization方法,在方法里面可以验证权限,如Session和Cookie
3.添加标记到方法或类上,如果在方法上添加特性,那么会在添加特性的方法执行前调用OnAuthorization方法。
如果在类上添加特性,那么在执行类中的所有方法前都会调用OnAuthorization方法。
如果要在所有控制器类的方法上都调用OnAuthorization方法,则在App_Start下的FilterConfig类下的RegisterGlobalFilters方法里面添加注册。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 7 namespace 过滤器 8 { 9 public class MyAuthorizeAttribute : AuthorizeAttribute 10 { 11 public override void OnAuthorization(AuthorizationContext filterContext) 12 { 13 //在此可以验证权限,如验证Session和Cookie 14 //可以用filterContext.HttpContext.Session["Key"] 获取Session 15 base.OnAuthorization(filterContext); 16 } 17 } 18 }
二、ActionFilterAttribute使用跟AuthorizeAttribute类似,执行Action前后和执行View前后过滤器
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 7 namespace 过滤器 8 { 9 public class MyActionFilterAttribute: ActionFilterAttribute 10 { 11 //加载Action前调用 12 public override void OnActionExecuting(ActionExecutingContext filterContext) 13 { 14 //在此也可以进行权限的验证 15 base.OnActionExecuting(filterContext); 16 } 17 //加载Action后调用 18 public override void OnActionExecuted(ActionExecutedContext filterContext) 19 { 20 base.OnActionExecuted(filterContext); 21 } 22 //加载View前调用 23 public override void OnResultExecuting(ResultExecutingContext filterContext) 24 { 25 base.OnResultExecuting(filterContext); 26 } 27 //加载View后调用 28 public override void OnResultExecuted(ResultExecutedContext filterContext) 29 { 30 base.OnResultExecuted(filterContext); 31 } 32 } 33 }
三、HandleErrorAttribute使用跟上面两个类似,异常处理过滤器
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 7 namespace 过滤器 8 { 9 public class MyHandleErrorAttribute: HandleErrorAttribute 10 { 11 public override void OnException(ExceptionContext filterContext) 12 { 13 Exception ex = filterContext.Exception; //获取异常 14 //在此可以把异常记录到日志里 15 //跳转到友好页面,避免把错误页显示给用户 16 filterContext.HttpContext.Response.Redirect("/err.html"); 17 base.OnException(filterContext); 18 } 19 } 20 }
过滤器执行顺序:授权验证过滤器——执行Action前后过滤器——加载View前后过滤器