• ASP.Net Core Web API中的IActionFilter总结


    本文简要介绍了ASP.Net Core Web API中的IActionFilter,对其调用顺序、特性标记、注册方法进行总结。具体环境为:VS2019 + ASP.Net Core 3.1。

    1、IActionFilter调用顺序

    在调用控制器(Controller)构造函数之后调用Filter;

    在接口调用之前调用IActionFilter的OnActionExecuting方法,

    在接口调用之后调用IActionFilter的OnActionExecuted方法。

    2、特性标记

    (1)直接使用特性标记

    使用这种方式要求IActionFilter子类具有无参构造函数。

    [HttpGet]
    [Route("Info")]
    [CustomActionFilterAttribute]
    public string Info()
    {
    	return "test info";
    }
    

    (2)使用TypeFilter特性

    在这种方式中,IActionFilter子类的构造函数可以注入一些服务,并且不需要在Startup中注入Filter服务。

    [HttpGet]
    [Route("Info")]
    [TypeFilter(typeof(CustomLogActionFilterAttribute))]
    public string Info()
    {
    	return "test info";
    }
    

    (3)使用ServiceFilter特性

    在这种方式中,IActionFilter子类的构造函数可以注入一些服务,但是需要在Startup中注入Filter服务。

    [HttpGet]
    [Route("Info")]
    [ServiceFilter (typeof(CustomLogActionFilterAttribute))]
    public string Info()
    {
    	return "test info";
    }
    
    //注册ActionFilter服务
    services.AddSingleton<CustomLogActionFilterAttribute>();
    

    3、注册方法(使用方法)

    (1)方法注册

    [HttpGet]
    [Route("Info")]
    [ServiceFilter (typeof(CustomLogActionFilterAttribute))]
    public string Info()
    {
    	return "test info";
    }
    

    (2)控制器注册

    [Route("api/[controller]")]
    [ApiController]
    [ServiceFilter(typeof(CustomLogActionFilterAttribute))]
    public class FilterController : ControllerBase
    {
    }
    

    (3)全局注册

    //注册Filter服务
    services.AddSingleton<CustomLogActionFilterAttribute>();
    
    //全局注册Filter
    services.AddMvc(options =>
    {
    	options.Filters.Add(typeof(CustomLogActionFilterAttribute));
    });
    

    (4)注意事项

    如果同时使用方法注册、控制器注册、全局注册,那么对应的调用顺序为:

    全局Filter OnActionExecuting->
    控制器Filter OnActionExecuting->
    方法Filter OnActionExecuting->
    执行API方法->
    方法Filter OnActionExecuted->
    控制器Filter OnActionExecuted->
    全局Filter OnActionExecuted
    

    OnActionExecuting(全局->控制器->方法) ->
    执行API方法 ->
    OnActionExecuted(方法->控制器->全局)
    
  • 相关阅读:
    sql 读取txt 文件内容,并写入sql的方法
    Thread.Mutex 互斥体
    SQL语句创建登录名,数据库用户,数据库角色及分配权限:
    倾国倾城 歌词
    LINUX下c/c++的学习(4)linux file and direction(stat fstat lstat access umask chmod ...)
    飞蛾扑火
    生成验证码点击可刷新
    C#项目调用非托管代码函数的方法
    【学习】数据库事务
    如何判断数据库是否存在
  • 原文地址:https://www.cnblogs.com/xhubobo/p/14416212.html
Copyright © 2020-2023  润新知