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

  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. 搭建Dynamic Web Project(动态web项目)的springmvc工程2

    本文转载自:http://blog.csdn.net/typa01_kk/article/details/45905129 此篇为“创建Dynamic Web Projec工程,”搭建Dynamic ...

  2. LevelDB Cache实现机制分析

    几天前淘宝量子恒道在博客上分析了HBase的Cache机制,本篇文章,结合LevelDB 1.7.0版本的源码,分析下LevelDB的Cache机制. 概述 LevelDB是Google开源的持久化K ...

  3. 阿里Java开发规范记录(一)

      近日,从网上下载了阿里云栖社区发布的<阿里巴巴Java开发手册(正式版)>v1.1.0版.从编程以来,一直苦于没有相关的.全面的.靠谱的规范可以参考,有了这手册,日后编程也算是找到了依 ...

  4. mybatis 学习一 建立maven项目

    一.直接建立Maven项目方法 1.建立Maven项目 接下来使用Eclipse的maven构建一个web项目,以构建SpringMVC项目为例: 1.1 选择建立Maven Project 选择Fi ...

  5. Dynamics CRM early binding and late binding

    The key advantage of late bound entity classes is that customer entities and attributes not avaliabl ...

  6. List转Datatable 新方法

    方法1,最简单的转换 DataTable dt = new DataTable(); dt.Columns.Add("id"); dt.Columns.Add("name ...

  7. 8.solr学习速成之FacetPivot

    什么是Facet.pivot  Facet.pivot就是按照多个维度进行分组查询,是Facet的加强,在实际运用中经常用到,一个典型的例子就是商品目录树 NamedList解释: NamedList ...

  8. Python特殊语法:filter、map、reduce、lambda

    filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决 ...

  9. Java微信公众平台开发(五)--文本及图文消息回复的实现

    转自:http://www.cuiyongzhi.com/post/43.html 上篇我们说到回复消息可以根据是否需要上传文件到微信服务器可划分为[普通消息]和[多媒体消息],这里我们来讲述普通消息 ...

  10. S3C6410的启动代码分析&nbsp;一

    本文开始第一篇,启动代码的编写,注意,仅仅是启动代码,并不是bootloader,因为只有boot,没有loader. 第一要明确:CPU上电之后,会从某个固定地址执行指令.ARM结构的CPU从地址0 ...