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

  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. linux下通过sysfs操作GPIO

    linux下通过sysfs操作GPIO 在嵌入式设备中对GPIO的操作是最基本的操作.一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的.其实linux下面有一个通用的GPIO操作接口,那就是 ...

  2. PHP下的命令行执行 php -S localhost -t public(public是根目录,也是入口文件所在目录,是LARAVEL的)

    PHP 的命令行模式     以下是 PHP 二进制文件(即 php.exe 程序)提供的命令行模式的选项参数,您随时可以通过 PHP -h 命令来查询这些参数. Usage: php [option ...

  3. 微信小程序之if操作

    .wxss控制样式 .price-agent{ font-size: 25rpx; color:#ababab; float: left; position: absolute; bottom: 0; ...

  4. php数组指定字段排序

    数据全都存放在名为 data 的数组中.这通常是通过循环从数据库取得的结果,例如 mysql_fetch_assoc(). <?php$data[] = array('volume' => ...

  5. MySQL写出高效SQL

    mysql设计标准事务处理标准索引使用标准约束设计sql语句标准 怎么写出高效SQL清晰无误的了知业务需求满足业务需求,不做无用功知道表数据量和索引基本情况知道完成SQL需要扫描的数据量级SQL执行计 ...

  6. verilog 之语法学习

    1.使用非基数表示的十进制视为有符号数.使用基数表示的十进制被视为无符号数. 2.线网中的值被解释为无符号数,整型寄存器中的值被解释为有符号的二进制补码数,. 3.如果选择表达式的值为 x.z,或越界 ...

  7. 为什么要初始化css样式

    因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异. 初始化CSS样式主要是提高编码质量,如果不初始化整个页面做完很糟糕,重复的CSS样 ...

  8. Python3 持久化pickle模块

    pickle提供了一个简单的持久化功能.可以将对象以文件的形式存放在磁盘上. 1.pickle.dump(obj, file[, protocol]) 序列化对象,并将结果数据流写入到文件对象中.参数 ...

  9. Flask之单元测试

    5.2单元测试 为什么要测试? Web程序开发过程一般包括以下几个阶段:[需求分析,设计阶段,实现阶段,测试阶段].其中测试阶段通过人工或自动来运行测试某个系统的功能.目的是检验其是否满足需求,并得出 ...

  10. leetcode728

    vector<int> selfDividingNumbers(int left, int right) { vector<int> V; for (int i = left; ...