• 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(方法->控制器->全局)
    
  • 相关阅读:
    Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 1)D. Frequency of String
    edu30F. Forbidden Indices
    QQ登录模拟GUI综合
    Thread与Runnable线程继承与实现
    windowsProgram系统强制隐藏解除代码
    最长公共上升子序列(LCIS问题)
    分层图学习笔记 & [JLOI2011]飞行路线题解
    Luogu P1441 砝码称重
    NOIP 2020 复习计划
    浅析BST二叉搜索树
  • 原文地址:https://www.cnblogs.com/xhubobo/p/14416212.html
Copyright © 2020-2023  润新知