AOP(面向切面编程)是一种架构思想,用于把公共的逻辑放到一个单独的地方,这样就不用每个地方都写重复的代码了。相当于:一夫当关,万夫莫开
在Asp.net mvc中提供了四种过滤器接口实现了这种AOP机制,分别是:IAuthorizationFilter,IActionFilter,IResultFilter,IExceptionFilter
注意:每次执行Action方法的时候,都会执行过滤器
1.IAuthorizationFilter
场景:一般用来检查当前用户是否有Action的执行权限,在每个Action被执行前执行OnAuthorization方法
使用方法:
1.创建一个实现IAuthorizationFilter接口的类
2.添加类到Global.asax中
参考案例:登录系统
filterContext.ActionDescriptor.ActionName 获取要执行的Action的名字。
filterContext.ActionDescriptor.ControllerDescriptor.ControllerName 获取要执行的Controller的名字。
filterContext.Result如果赋值了,那么就不会再执行Action了,而是以"filterContext.Result"的值作为执行结果。
filterContext.HttpContext.Response.Redirect("地址"); 和filterContext.Result不同,这句执行完,还是会执行Action方法的。
在过滤器中推荐使用:filterContext.Result = new RedirectResult("路径");
2.IActionFilter
IActionFilter也是在每个Action被执行前执行OnActionExecuting方法,每个Action执行完毕后再执行OnActionExecuted方法。和IAuthorizationFilter的区别是IAuthorizationFilter再IActionFilter之前执行。
3.IResultFilter
IResultFilter是在每个ActionResult的前后执行IResultFilter。
4.IExceptionFilter
当Action执行发生未处理异常的时候执行OnException方法
获取异常代码:Exception ex=filterContext.Exception
总结:只需要编写一次,在其他地方就可以执行了。