.net core MVC Filters 过滤器介绍
一、过滤器的优级依次介绍如下(逐次递减):
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 过滤器介绍的更多相关文章
- ASP.NET Core MVC – Tag Helpers 介绍
ASP.NET Core Tag Helpers系列目录,这是第一篇,共五篇: ASP.NET Core MVC – Tag Helpers 介绍 ASP.NET Core MVC – Caching ...
- .Net Core MVC中过滤器简介
在.Net Framework MVC 中有四种过滤器,授权过滤器(Authorize).Action 过滤器.结果过滤器(Result).异常过滤器(Exception)四种过滤器.在.Net Co ...
- ASP.NET Core MVC Tag Helpers 介绍
简介 Tag Helpers 提供了在视图中更改和增强现有HTML元素的功能.将它们添加到视图中,会经过Razor模板引擎处理并创建一个HTML,之后再返回给浏览器.有一些Tag Helpers,其实 ...
- ASP.NET core MVC动作过滤器执行顺序
using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Threading.Tasks; namespace dotnet ...
- mvc Filters 过滤器
项目需要控制controller和action的访问权限. 看了下资料,发觉还是很方便的. 首先在mvc项目下创建一个文件夹 Filters, 然后在Filters中创建一个类.代码如下 namesp ...
- ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 25. 过滤器
在MVC的请求管道 并不是 asp.net core的请求管道.所以说Filter是专用于MVC的 贯穿特性,横穿关注点.比如授权.日志 这里的Authorize其实就是一个Filter,主要用来授 ...
- ASP.NET Core MVC 之过滤器(Filter)
ASP.NET MVC 中的过滤器允许在执行管道中的特定阶段之前或之后运行代码.可以对全局,也可以对每个控制器或每个操作配置过滤器. 1.过滤器如何工作 不同的过滤器类型在管道中的不同阶段执行,因此具 ...
- .Net Core MVC全局过滤器验证是否需要登录
1.新增全局登录过滤器LoginCheckAttribute 1 public class LoginCheckAttribute: ActionFilterAttribute 2 { 3 publi ...
- .NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI
作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计.那如何套用呢?今天 ...
随机推荐
- mysql复制(高可用架构方案的基础)
mysql复制:把一个数据库实例上所有改变复制到另外一个数据库库服务器实例的过程特点:1.没有改变就无所谓复制 ;改变是复制的根本与数据源2.所有的改变:是指可以复制全部改变,也可以复制部分改变 可以 ...
- java排序。。。
题目:n位学生,m位评委,去掉一个最高分,和一个最低分,选手最后得分 package com.aini; import java.util.Arrays; public class WDS { int ...
- 开启vmotion,实现虚拟机可以在线迁移的选项
先决条件: 1.vcenter5.5 2.vmotion服务开启 3.分布式交换机已经部署完毕 4.虚拟机在线迁移必须在web管理下,在vclient不可以
- StampedLock
StampedLock是Java8引入的一种新的所机制,简单的理解,可以认为它是读写锁的一个改进版本,读写锁虽然分离了读和写的功能,使得读与读之间可以完全并发,但是读和写之间依然是冲突的,读锁会完全阻 ...
- Linux性能监测:CPU篇
CPU 也是一种硬件资源,和任何其他硬件设备一样也需要驱动和管理程序才能使用,我们可以把内核的进程调度看作是 CPU 的管理程序,用来管理和分配 CPU 资源,合理安排进程抢占 CPU,并决定哪个进程 ...
- BGP基本配置的方法
边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议. BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议. as100 as200 ...
- C++深度解析教程学习笔记(3)函数的扩展
1.内联函数 1.1.常量与宏的回顾 (1)C++中的 const 常量可以替代宏常数定义,如: ; //等价于 #define A 3 (2)C++中是否有解决方案,可以用来替代宏代码片段呢? 1. ...
- linux进程的管道通信
linux进程的管道通信 要求 编程实现进程的管道通信,掌握管道通信的同步和互斥机制. 相关函数 pipe管道 指用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,又名pipe文件.向管 ...
- Cfree clion windows c语言 socket 网络编程
server.c #include <stdio.h> #include <winsock2.h> #define SERVER_PORT 5208 //侦听端口 int ma ...
- 【HDU 6031]】 Innumerable Ancestors
题意 有一棵有n个结点的树,这里有m个询问,每个询问给出两个非空的结点集合A和B,有些结点可能同时在这两个集合当中.你需要从A和B中分别选择一个节点x和y(可以是同一个结点)你的目标是使LCA(x,y ...