ASP.NET MVC 提供 ActionFilterAttribute 抽象类别,让开发人员在 Action 之前或之后执行自订涵式,例如写入LOG。
ActionFilterAttribute 的命名是在自订名称尾端加上「Attribute」例如:WebAuthorizeAttribute
public class NameController : Controller{ [WebAuthorize] public ActionResult Index() { return View(); }}
自订类别继承 ActionFilterAttributeActionFilterAttribute 有四种方法
执行Action之前执行:OnActionExecuting
执行Action之后执行:OnActionExecuted
执行Action Result之前执行:OnResultExecuting
执行Action Result之后执行:OnResultExecuted
sealed class WebAuthorizeAttribute : ActionFilterAttribute{ public override void OnActionExecuting(ActionExecutingContext filterContext) { //欲执行的工作 }}
延伸讨论AttributeUsage用来规範ActionFilterAttribute的使用方式,
共有三个属性,藉由定义下列参数来设定。
ValidOn
可以指定只能放在什么属性前面,例如类别(Class)或是全部(All)。
AllowMultiple
是否允许在同一个涵式上重複附加多个。
Inherited
是否可由衍生类别继承,以及覆写成员。
备注:如下继承若为 True,实际行为会取决于AllowMultiple属性的值
继承:True,AllowMultiple:False,结果:衍生类别覆盖类别
继承:True,AllowMultiple:True ,结果:衍生类别与类别共存
[AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)]sealed class WebAuthorizeAttribute : ActionFilterAttribute{ public override void OnActionExecuting(ActionExecutingContext filterContext) { //欲执行的工作 }}