关于拦截器模式的理解

在很多框架中都提供了拦截器模式的开发方法,有的是在运行时进行方法的拦截注入,有的是在编译时进行的。今天突然想到MVC的控制器中有这样一种方式:

    public class BaseController : Controller  
    {  
        public override void OnActionExecuting(ActionExecutingContext filterContext)  
        {  
  
            String name = HttpContext.Session.GetString("name");  
            if (name == null)  
            {  
                //重定向到登录页面  
                HttpContext.Response.Redirect("Home/Login");  
                return;  
            }  
            base.OnActionExecuting(filterContext);  
        }  
    } 

这种方式的前提是,在基类Controller中将拦截动作进行模板化的设计,子类在实现时进行拦截代码的注入。即定义执行前,执行后等一些列虚方法,在子类中进行具体实现。这也是一种简单的拦截方式的实现。

基于属性的拦截器内置实现参见ASP.NET官方文档:

https://docs.microsoft.com/zh-cn/aspnet/core/mvc/controllers/filters

posted @ 2018-03-09 15:17  Perfectionist  阅读(304)  评论(0编辑  收藏  举报