ASP.NET Core – Filter

定义

Filter 类似 Middleware, 只是它集中在处理 request 的前后, 站 MVC 角度看就是 before 和 after action.

主要参考

Filters in ASP.NET Core

最常用的 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 多一个功能就是可以传参数. 

ServiceFilter vs TypeFilter

原文地址:https://www.cnblogs.com/keatkeat/p/15449133.html