微软官网例子:Filter筛选器

使用场景(执行顺序):

IAsyncActionFilter

使用异步actionFilter 只需要实现 他的 :OnActionExecutionAsync 方法 (注意这里的异步不是拦截异步是指的是 当前OnActionExecutionAsync方法内执行的内容是异步的)

例如:我在这里注入两个 ActionbFliter (MyActionFilter1 和 MyActionFilter2)

注意 : 多个Filter 执行是一个链路形式的

MyActionFilter1

public class MyActionFilter1 : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context,
ActionExecutionDelegate next)
{
Console.WriteLine("MyActionFilter 1:开始执行");
ActionExecutedContext r = await next(); //如果执行 下一个ActionFilter
if (r.Exception != null)
{
Console.WriteLine("MyActionFilter 1:执行失败");
}
else
{
Console.WriteLine("MyActionFilter 1:执行成功");
}
}
}

MyActionFilter2

public class MyActionFilter2 : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context,
ActionExecutionDelegate next)
{
Console.WriteLine("MyActionFilter 2:开始执行");
ActionExecutedContext r = await next();
if (r.Exception != null)
{
Console.WriteLine("MyActionFilter 2:执行失败");
}
else
{
Console.WriteLine("MyActionFilter 2:执行成功");
}
}
}

可以看到多个执行的效果

如上图,他是一个链路形式 !

也可以使用 ActionFilterAttribute

可以看到 ActionFilterAttribute 包含了 IAsyncActionFilter 接口 和 IAsyncResultFilter 接口

例子 :

 public class ActionAttribute : ActionFilterAttribute
{
private readonly ILogger<HandleActionAttribute> _logger;
public HandleActionAttribute(ILogger<ActionAttribute> logger)
{
_logger = logger;
}
// 这里需要重写父类的 virtual OnActionExecutionAsync() 方法
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{ HttpRequest request = ((Microsoft.AspNetCore.Mvc.ControllerBase)context.Controller).Request;
AuthParam param = GetParameters(request);
CheckParameters(param);
//逻辑处理 省略
await base.OnActionExecutionAsync(context, next);
}

调用的时候

[TypeFilter(typeof(ActionAttribute))]

Demo

一般我们程序会使用两个Filter

(检测权限)在方法执行之前进行判断

例如:

Filter 筛选器(一)之 ActionFilter-- IAsyncActionFilter 和 ActionFilterAttribute的更多相关文章

  1. Filter 筛选器(三)之 自定义一个启动事务的 TransactionScopeFilter

    如果一个方法内有多个写入操作,比如 写入A表,然后用A表的自增id 去写入B表,假如A表写入成功,但B表因为某种原因写入失败!(这就导致A表写入了脏数据) 这时候 我们可以自定义 一个Filter 进 ...

  2. MVC4 Filter (筛选器)

    Filter,在MVC中我们通常将Filter定义成Attribute特性 来供Controller 或者Action 方法调用. FilterAttribute 是所有Filter 的基类. 而 F ...

  3. Filter 筛选器(二)之 ExceptionFilter

    public class MyExceptionFilter : IAsyncExceptionFilter { private readonly ILogger<MyExceptionFilt ...

  4. MVC四大筛选器—ActionFilter&ResultedFilter

    AuthorizeFilter筛选器 在Action的执行中包括两个重要的部分,一个是Action方法本身逻辑代码的执行,第二个就是Action方法的筛选器的执行. MVC4中筛选器都是以AOP(面向 ...

  5. 表示层设计模式:Intercepting Filter(截取筛选器)模式

     上下文  问题  影响因素  解决方案  变体  示例  结果上下文  相关模式  致谢  上下文 对于任何一个曾经从头建立 Web 应用程序的人来说,他们都会有这样的体会:这项任务所需要的独立完成 ...

  6. Filter List Views 筛选器列表视图

    In this lesson, you will learn how to filter a List View. Three techniques, based on different scena ...

  7. mvc 筛选器

    之前公司中,运用ActionFilterAttribute特性实现用户登录信息的验证,没事看了看,留下点东西备忘. 好的,瞅这玩意一眼就大概能猜到这货是干嘛的了吧,没错,action过滤器.其实就是A ...

  8. 基础教程:ASP.NET Core 2.0 MVC筛选器

    问题 如何在ASP.NET Core的MVC请求管道之前和之后运行代码. 解 在一个空的项目中,更新 Startup 类以添加MVC的服务和中间件. publicvoid ConfigureServi ...

  9. asp.net core 2.2 中的过滤器/筛选器(上)

    ASP.NET Core中的过滤器/筛选器 通过使用 ASP.NET Core MVC 中的筛选器,可在请求处理管道中的特定阶段之前或之后运行代码. 注意:本主题不适用于 Razor 页面. ASP. ...

随机推荐

  1. python 面向对象理解

    简介 与java语言一样,python也属于面向对象编程,除此之外,还有面向过程编程.函数式编程. 面向过程编程:依据业务逻辑自上而下一步一步编写, 可能会存在冗余现象 函数式编程:需要编程语言可以将 ...

  2. Rust 从入门到精通01-简介

    1.rust 从哪里来 Rust语言在2006年作为 Mozilla 员工 Graydon Hoare 的私人项目出现,而 Mozilla 于 2009 年开始赞助这个项目.第一个有版本号的 Rust ...

  3. CF Round #805 (Div. 3) 题解

    A 直接模拟即可,注意 \(10^k\) 的情况(罚时!罚时!罚时!). A Code using namespace std; typedef long long ll; typedef pair& ...

  4. Java学习(一)MarkDown语法

    Java学习(一)MarkDown语法 一.标题语法 一级标题 一级标题前添加一个#号 二级标题 二级标题前添加两个#号 三级标题 三级标题前添加三个#号 ... 二.字体 1.粗体 hello wo ...

  5. 完整代码:WTL_Freecell绿色版

    WTL_Freecell是WTL编制的空当接龙绿色版,介绍参见:https://www.cnblogs.com/ybmj/p/11339911.html .这里提供WTL_Freecell的完整代码 ...

  6. Luogu2801 教主的魔法 (分块)

    与hzw的分块2类似,放vector排序 #include <iostream> #include <cstdio> #include <cstring> #inc ...

  7. Linux 04 用户文件

    参考源 https://www.bilibili.com/video/BV187411y7hF?spm_id_from=333.999.0.0 版本 本文章基于 CentOS 7.6 概述 完成用户管 ...

  8. 解决zlibrary注册后,再次登录提示密码错误的问题

    很多小伙伴注册后,再登录提示电子邮件或密码错误,但是可以确认账号密码都是正确的,这种应该怎么处理呢? 其实这种问题有两种处理方式, 首先使用 https://find.looks.wang/ 检测可以 ...

  9. ENSP 与VMware workstation 同时安装会出现AR40 或者VMware蓝屏

    前言: 你已经安装了VMware workstation,ENSP,Virtualbox,并且关闭了hyper-v,还会出现报错或者VMware蓝屏. #此处补充一条命令systeminfo 如果你看 ...

  10. ss 显示unix 域 的socket 缓冲区不正确

    一个unix 域socket,平时我们用ss -auxp 来查看是否有数据在内核没有到用户态, [root@localhost unix]# ss -auxp |grep -i server.o u_ ...