在很多框架中都提供了拦截器模式的开发方法,有的是在运行时进行方法的拦截注入,有的是在编译时进行的。今天突然想到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