一、过滤器的优级依次介绍如下(逐次递减):

  Authorization Filter ->  Resource Filter -> Acton Filter -> Exception Filter -> Result Filter

  的.net Core MVC 中同步过滤器,新增了异步过滤器,对数据可以进行异步处理。

  1、Authorization Filter  (权限过滤器)

    /// <summary>
/// 权限过滤器
/// </summary>
public class GlobalAuthorizationFilter : Attribute, IAuthorizationFilter
{
/// <summary>
/// 优化权最高的过滤器
/// </summary>
/// <param name="context"></param>
public void OnAuthorization(AuthorizationFilterContext context)
{
//context.Result = new ObjectResult("IAuthorizationFilter 过滤输出");
Console.WriteLine("IAuthorizationFilter 过滤输出");
}
}

同步权限过滤器

/// <summary>
/// 异步权限过滤器
/// </summary>
public class GlobalAsyncAuthorizationFilter : Attribute, IAsyncAuthorizationFilter
{
/// <summary>
/// 执行异步Action 过滤器
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
Console.WriteLine("IAsyncAuthorizationFilter 拦截输出");
await Task.CompletedTask;
}
}

异步权限过滤器

  2、Resource Filter (资源过滤器)

/// <summary>
/// 资源过滤器
/// </summary>
public class GlobalResourceFilter : IResourceFilter
{
/// <summary>
/// 获取资源后拦截
/// </summary>
/// <param name="context"></param>
public void OnResourceExecuted(ResourceExecutedContext context)
{
Console.WriteLine("IResourceFilter OnResourceExecuted 输出");
} /// <summary>
/// 获取资源前拦截
/// </summary>
/// <param name="context"></param>
public void OnResourceExecuting(ResourceExecutingContext context)
{
Console.WriteLine("IResourceFilter OnResourceExecuting 输出");
}
}

同步资源过滤器

/// <summary>
/// 异步资源加载过滤器
/// </summary>
public class GlobalAsyncResourceFilter : IAsyncResourceFilter
{
/// <summary>
///
/// </summary>
/// <param name="context"></param>
/// <param name="next"></param>
/// <returns></returns>
public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next)
{
// 执行前
await next.Invoke(); // 执行后
await OnExecutedAsync(context);
} /// <summary>
/// 执行后
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public async Task OnExecutedAsync(ResourceExecutingContext context)
{
Console.WriteLine("IAsyncResourceFilter 执行后");
await Task.CompletedTask;
}
}

资源异步过滤器

  3、Acton Filter  (Action 过滤器)

/// <summary>
/// Acion过滤器
/// </summary>
public class GlobalActonFilter : Attribute, IActionFilter
{
/// <summary>
/// Acion 执行后拦截
/// </summary>
/// <param name="context"></param>
public void OnActionExecuted(ActionExecutedContext context)
{
Console.WriteLine("IActionFilter OnActionExecuted Acion 执行后拦截");
} /// <summary>
/// Acion 执行前拦截
/// </summary>
/// <param name="context"></param>
public void OnActionExecuting(ActionExecutingContext context)
{
Console.WriteLine("IActionFilter OnActionExecuting Acion 执行前拦截");
}
}

同步Acion过滤器

/// <summary>
/// 异步 Action 过滤器
/// </summary>
public class GlobalAsyncActonFilter : Attribute, IAsyncActionFilter
{
/// <summary>
/// 执行异步Action 过滤器
/// </summary>
/// <param name="context"></param>
/// <param name="next"></param>
/// <returns></returns>
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// 执行前
await next.Invoke(); // 执行后
await OnExecutedAsync(context);
} /// <summary>
/// 执行后
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public async Task OnExecutedAsync(ActionExecutingContext context)
{
Console.WriteLine("IAsyncActionFilter 执行后");
await Task.CompletedTask;
}
}

异步Action过滤器

  4、Exception Filter (异常过滤器)

    /// <summary>
/// 异常全局过滤器
/// </summary>
public class GlobalExceptionFilter : IExceptionFilter
{
/// <summary>
/// 异常处理
/// </summary>
/// <param name="context">异常上下文</param>
public void OnException(ExceptionContext context)
{
Console.WriteLine(context.Exception);
//如果这里设为false,就表示告诉MVC框架,我没有处理这个错误。然后让它跳转到自己定义的错误页(设为true的话,就表示告诉MVC框架,异常我已经处理了。不需要在跳转到错误页了,也部会抛出黄页了)
context.ExceptionHandled = false;
}
}

同步异常全局过滤器

 /// <summary>
/// 异步异常全局过滤器
/// </summary>
public class GlobalAsyncExceptionFilter : IAsyncExceptionFilter
{
/// <summary>
/// 异常异步处理
/// </summary>
/// <param name="context">异常上下文</param>
/// <returns></returns>
public async Task OnExceptionAsync(ExceptionContext context)
{
Console.WriteLine(context.Exception.Message);
//如果这里设为false,就表示告诉MVC框架,我没有处理这个错误。然后让它跳转到自己定义的错误页(设为true的话,就表示告诉MVC框架,异常我已经处理了。不需要在跳转到错误页了,也部会抛出黄页了)
context.ExceptionHandled = false;
await Task.CompletedTask;
}

异步异常全局过滤器

  5、Result Filter (结果过滤器)

    /// <summary>
/// 结果过滤器
/// </summary>
public class GlobalResultFilter : IResultFilter
{
/// <summary>
/// 动作结果执行后
/// </summary>
/// <param name="context"></param>
public void OnResultExecuted(ResultExecutedContext context)
{
Console.WriteLine("IResultFilter OnResultExecuted Acion 动作结果执行后");
} /// <summary>
/// 动作结果执行前
/// </summary>
/// <param name="context"></param>
public void OnResultExecuting(ResultExecutingContext context)
{
Console.WriteLine("IResultFilter OnResultExecuting Acion 动作结果执行前");
}
}

同步结果过滤器

    /// <summary>
/// 异步 结果过滤器
/// </summary>
public class GlobalAsyncResultFilter : IAsyncResultFilter
{ /// <summary>
/// 动作结果执行后
/// </summary>
/// <param name="context"></param>
/// <param name="next"></param>
/// <returns></returns>
public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
{
await next.Invoke();
await OnExecutedAsync(context);
} /// <summary>
/// 执行后
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public async Task OnExecutedAsync(ResultExecutingContext context)
{
Console.WriteLine("IAsyncResultFilter 执行");
await Task.CompletedTask;
}
}

异步 结果过滤器

Demo 源码:https://github.com/intotf/netCore/tree/master/WebFilters

.net core MVC Filters 过滤器介绍的更多相关文章

  1. ASP.NET Core MVC – Tag Helpers 介绍

    ASP.NET Core Tag Helpers系列目录,这是第一篇,共五篇: ASP.NET Core MVC – Tag Helpers 介绍 ASP.NET Core MVC – Caching ...

  2. .Net Core MVC中过滤器简介

    在.Net Framework MVC 中有四种过滤器,授权过滤器(Authorize).Action 过滤器.结果过滤器(Result).异常过滤器(Exception)四种过滤器.在.Net Co ...

  3. ASP.NET Core MVC Tag Helpers 介绍

    简介 Tag Helpers 提供了在视图中更改和增强现有HTML元素的功能.将它们添加到视图中,会经过Razor模板引擎处理并创建一个HTML,之后再返回给浏览器.有一些Tag Helpers,其实 ...

  4. ASP.NET core MVC动作过滤器执行顺序

    using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Threading.Tasks; namespace dotnet ...

  5. mvc Filters 过滤器

    项目需要控制controller和action的访问权限. 看了下资料,发觉还是很方便的. 首先在mvc项目下创建一个文件夹 Filters, 然后在Filters中创建一个类.代码如下 namesp ...

  6. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器

    在MVC的请求管道 并不是  asp.net core的请求管道.所以说Filter是专用于MVC的 贯穿特性,横穿关注点.比如授权.日志 这里的Authorize其实就是一个Filter,主要用来授 ...

  7. ASP.NET Core MVC 之过滤器(Filter)

    ASP.NET MVC 中的过滤器允许在执行管道中的特定阶段之前或之后运行代码.可以对全局,也可以对每个控制器或每个操作配置过滤器. 1.过滤器如何工作 不同的过滤器类型在管道中的不同阶段执行,因此具 ...

  8. .Net Core MVC全局过滤器验证是否需要登录

    1.新增全局登录过滤器LoginCheckAttribute 1 public class LoginCheckAttribute: ActionFilterAttribute 2 { 3 publi ...

  9. .NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI

    作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计.那如何套用呢?今天 ...

随机推荐

  1. 找回mysql root用户的密码

    1.停掉mysql服务ps -ef | grep mysqldkill -9 mysql进程的pid2.vi /etc/my.cnf找到[mysqld]在下面添加一行skip-grant-tables ...

  2. mysql事务之二:MySQL隔离级别演示

    登录mysql: mysql -u root -p123456 Mysql 版本号 mysql> select version(); +-------------------------+ | ...

  3. 过河卒(Noip2002)(dp)

    过河卒(Noip2002) 时间限制: 1 Sec  内存限制: 128 MB提交: 7  解决: 6[提交][状态][讨论版][命题人:quanxing] 题目描述 棋盘上A点有一个过河卒,需要走到 ...

  4. Velodyne 线性激光雷达数据合成

    坐标系旋转 如果想用字母表示角度,有两个方法: 1.  用三角函数sind(θ4).cosd(θ4).tand(θ4).atand(θ4)进行表示,注意:θ4在输入时是角度,只是没有度数特有的符号(° ...

  5. js中的class

    js中的class 类写法 class SuperClass { constructor(option) { this.a = option; } fn() { console.log(this.b) ...

  6. whoosh----索引|搜索文本类库

    先了解基本概念和步骤: Quick Start Whoosh是一个索引文本和搜索文本的类库,他可以为你提供搜索文本的服务,比如如果你在创建一个博客的软件,你可以用whoosh为它添加添加一个搜索功能以 ...

  7. 科学计算工具Numpy简介

    Numpy(Numerical Python) Numpy:提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于多维数组(矩阵)处理的库.用来存储和处理大型矩阵,比Python自身的嵌 ...

  8. windows重启mysql命令

    开始->运行->cmd 停止:net stop mysql 启动:net start mysql 前提MYSQL已经安装为windows服务

  9. 利用jquery mobiscroll插件选择日期、select、treeList的具体运用

    体验更优排版请移步原文:http://blog.kwin.wang/programming/jquery-mobiscroll-select-treeList.html mobiscroll是个很好用 ...

  10. angularJS笔记之Promise

    Promise是一种模式,以同步操作的流程形式来操作异步事件,避免了层层嵌套,可以链式操作异步事件. 我们知道,在编写javascript异步代码时,callback是最最简单的机制,可是用这种机制的 ...