定义
Filter 类似 Middleware, 只是它集中在处理 request 的前后, 站 MVC 角度看就是 before 和 after action.
主要参考
最常用的 Action Filter
public class MyActionFilterAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext context) { // before action } public override void OnActionExecuted(ActionExecutedContext context) { // after action } public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { // before action OnActionExecuting(context); var actionExecutedContext = await next(); // after action OnActionExecuted(actionExecutedContext); // await base.OnActionExecutionAsync(context, next); // this will call OnActionExecuting, OnActionExecuted } }
如果需要里面需要跑 async 就 override OnActionExecutionAsync. 注: 一旦 override 了 OnActionExecutionAsync 内部要记得手动调用 OnActionExecuting 和 OnActionExecuted 哦.
常见问题
ActionFilter 不能 DI
要想 DI 就要用 ServiceFilter 或 TypeFilter wrap 起来
TypeFilter 比 ServiceFilter 多一个功能就是可以传参数.