需要 类文件 实现 AcitonFilter 或者 IAsyncActionFilter 来使用 AOP AcitonFilter
AcitonFilter场景:主要用作 在不修改源码的情况下,在controller控制器方法 执行的 前后加上代码
ActionFilter 执行流程:ActionFilter 的 OnActionExecuting 方法是在 执行 controller方法之前 执行,然后 执行 controller方法。 方法执行完毕, 执行 ActionFilter 的 OnActionExecuted方法
简介 ActionFilter前方法➡controller方法➡ActionFilter后方法
多个 ActionFilter 方法 执行 ActionFilter方法1前方法 ActionFilter方法2前方方法 controller 方法 ActionFilter方法2后方法 ActionFilter方法1后方法。
配置:需要在 Program.cs 文件 注入
builder.Services.Configure<MvcOptions>(ops =>
{
ops.Filters.Add<MyAcitonFilter01>();
ops.Filters.Add<MyActionFilter02>();
});
下面 分别 实现了 AcitonFilter 和 IAsyncActionFilter
using Microsoft.AspNetCore.Mvc.Filters;
namespace aspnetcore011
{
public class MyAcitonFilter01 : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
Console.WriteLine("MyAcitonFilter01执行前");
//执行下一个方法
ActionExecutedContext action = await next();
//后方法
if (action.Exception != null)
{
Console.WriteLine("MyAcitonFilter01执行后异常");
}
else
{
Console.WriteLine("MyAcitonFilter01执行后成功");
}
}
}
}
using Microsoft.AspNetCore.Mvc.Filters;
namespace aspnetcore011
{
public class MyActionFilter02 : IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{
Console.WriteLine("MyActionFilter02执行后");
}
public void OnActionExecuting(ActionExecutingContext context)
{
Console.WriteLine("MyActionFilter02执行前");
}
}
}