过滤器允许我们在Action执行之前和执行之后去执行一下业务代码
一、过滤器的作用域
1、全局过滤器, 在Startup.cs文件中注册
2、控制器过滤器, 在控制器类上面使用标注
3、action过滤器
二、全局过滤器使用
1、在 core 目录,添加 TestActionFilter.cs 类并继承IActionFilter 实现
public class TestActionFilter : IActionFilter{public void OnActionExecuted(ActionExecutedContext context){Debug.WriteLine("Action执行之后执行这里的代码");}public void OnActionExecuting(ActionExecutingContext context){Debug.WriteLine("Action执行之前执行这里的代码");}}
2、在Startup.cs 添加全局变量过滤器
注意:
就算是区域的action 也会跳进这个过滤器里面的。所以关于全局过滤器 大家应该要谨慎使用。因为所有的请求 都会执行过滤器里面的代码。所以如果一些非常耗时的操作 不应该加到全局过滤器里面。
全局过滤器 主要处理一些 比如 防盗链 权限认证这些操作
三、控制器和Action级别过滤器
可以在控制器上面 进行标注使用某个过滤器控制器和Action的过滤器,需要实现一个特性类(如:ResultFilterAttribute)然后在里面 也可以实现OnResultExecuting另外 还可以添加自定义的属性。
特性类包含下面一些
ResultFilterAttribute 结果后过滤器
ActionFilterAttribute 执行前后过滤器
ExecutionFilterAttribute 异常过滤器
FormatFilterAttribute 格式化过滤器
ServiceFilterAttribute 服务过滤器
TypeFilterAttribute
1、core目录添加 MyResultFilterAttribute.cs 类
public class MyResultFilterAttribute : ResultFilterAttribute{public string Val { get; set; }public override void OnResultExecuted(ResultExecutedContext context){}public override void OnResultExecuting(ResultExecutingContext context){}}
2、控制器,Action调用
四、重写控制器基类的OnActionExecuted、OnActionExecuting两个方法,达到过滤器的效果
1、Controllers 文件夹添加 BaseController.cs类,继承Controller
public class BaseController : Controller{public override void OnActionExecuted(ActionExecutedContext context){base.OnActionExecuted(context);Debug.WriteLine("Action执行之后执行这里的代码");}public override void OnActionExecuting(ActionExecutingContext context){base.OnActionExecuting(context);Debug.WriteLine("Action执行之前执行这里的代码");}}