在上一篇博客中,我们简单的学习了一下面向切面编程,而过滤器就是对这一思想的应用。那如何在项目中使用呢?
一、认识一下ActionFilterAttribute
1、在IActionFilter接口中:
在Action执行之前,执行OnActionExecuting(获取触发器的名字),执行之后,执行OnActionExecuted方法;action本身是一个维度。
2、在IResultFilter
在视图渲染之前,执行OnResultExecuting方法,渲染之后,执行OnResultExecuted方法;
二、使用方法
MyactionFilterAttribute是一个特性类,可以做一个特性标签,直接在controller中被引用
public class HomeController : Controller { // // GET: /Home/ [MyActionFilter(Name = "这是IndexAction")] public ActionResult Index() { Response.Write("<br />Action在执行"); return View("IndexAS"); }
标签这样引用在controller后,开发人员不用关心什么时候去做日志,什么时候回来开发,在filter类中已经做好了顺序的安排;这就是二维:开发人员和filter,各自负责各自的内容;
如果想让整个Homecontroller中的所有action都受过滤器的影响,可以把标签打在控制器上面;
如果想让所有的控制器中的action受过滤器的影响,可以将标签打到global.asax.cs下。
在特性类下也可再打特性。
三、应用场景:
1、日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(PageView)等。
2、权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面;
3、性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);
4、通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现。
5、OpenSessionInView:如hibernate,在进入处理器打开Session,在完成后关闭Session。
四、过滤器的好兄弟~拦截器:
推荐阅读:http://www.tuicool.com/articles/2qEzE3F
https://zhidao.baidu.com/question/1821157445942816868.html
这是我对过滤器的理解,希望能对读者有所帮助。