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

  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

最新文章

  1. magento app/design/adminhtml/default/default/template/sales/order/view/info.phtml XSS Vul
  2. MVC中Form表单的提交
  3. sdk和ndk
  4. Java面向对象的封装
  5. 49个jquery代码经典片段
  6. HashMap 实现详解
  7. java中文件操作
  8. 使用less函数实现不同背景的CSS样式
  9. javascript常用开发笔记:一个简单强大的js日期格式化方法
  10. ASP.Net Core开发(踩坑)指南
  11. 《Android插件化开发指南》勘误
  12. Linux squid代理
  13. 设置防火强开机自启,以及没有成功的tomcat开机自启
  14. caffe网络中屏蔽某一层的输出Silence层
  15. createrepo local http yum
  16. EClassNotFound
  17. Android Studio 快速实现上传项目到Github(详细步骤)
  18. Bootstrap的介绍和响应式媒体查询
  19. php图片采集后按原路径保存图片
  20. Java 中的方法内部类

热门文章

  1. 验证DataGridView单元格的值
  2. java代码-----逻辑运算符
  3. 作业1开发一个简单的python计算器
  4. ajax-简介和实现注册登录
  5. jQuery笔记——基础知识
  6. Jquery缩放
  7. Reporting Service中配置oracle 数据连接
  8. Elasticsearch聚合限制内存使用
  9. 客户端级别的渲染分析工具 dynaTrace
  10. 697. Degree of an Array 频率最高元素的最小覆盖子数组