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(方法->控制器->全局)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM