前言

书承接上文,咱们上回说到,.net core中各种日志框架, 今天我讲讲.net core中的内置过滤器吧!

1.什么是过滤器?

ASP.NET Core中的筛选器允许代码在请求处理管道中的特定阶段之前或之后运行,从用户发送一个请求,到控制器处理完,在返回给用户,在这个过程,请求会经历多个中间件,所谓的过滤器,就是在请求过程中,拦截请求,对请求进行处理,例如:权限认证,异常处理等等。如下图所示:

2.过滤器的分类

  • Authorization过滤器:这个在所有的过滤器中最先运行,主要功能是检测当前用户是否权限访问,如果没有权限就直接短路(终止请求,返回HTTP:401),不会先下执行。这里需要特别注意一下,因为授权过滤器是最先执行,如果它有异常需要小心处理,因为它不会向下执行,所以不会到Exception过滤器,这点需要注意。
  • Resource过滤器:这个过滤器是紧跟着Authorization过滤器后面的过滤器,OnResourceExecuting在模型绑定之前运行代码,在管道的其余部分完成之后,OnResourceExecuted运行代码。
  • Action过滤器:在调用动作方法之前和之后立即运行代码,可以监控并修改传递给操作的参数,同时也能监控并修改返回的结果。(微软说在Razor Pages不支持这个过滤器)
  • Exception过滤器:将全局策略应用于在写入响应主体之前发生的未处理异常,监听全局的异常处理。
  • Result过滤器:在执行操作结果之前和之后立即运行代码,紧跟着Action过滤器,对action返回的结果可以进行数据格式转换。

2.1过滤器的执行顺序:



Authorization-->Resource-->Action-->Exception-->Result

2.2客户端发送一个请求到服务端的过程

3.默认执行顺序

先是执行全局,再到控制器,最后到具体的方法,然后返回到控制器,最后到全局。这里说的执行顺序,是过滤器在不同作用域的执行顺序。

4.为什么要使用过滤器?

过滤器的分类我己经介绍完毕,想必大家对过滤器有初步的了解,知道它是什么,能做哪些事,你肯定会有疑问,我们为什么要使用过滤器?

答:当我们客户端向服务端发送请求的时候,如果此时我需要验证用户是否登录,如果不使用过滤器的方式去验证,那在我们每一个发送请求之前,我们都需要去服务端认证当前是否有用户登录,当前的用户是否拥有访问权限,这样需要把同一份验证代码,反复复制,这不仅会增加工作量,一旦有新需求,改动很麻烦,如果使用过滤器去认证,这样只需要修改服务端的代码,就可以达到一劳永逸,即使以后有修改,只需要修改服务端的逻辑即可。

5.总结

至此,我们已经了解过滤器是什么(what),为什么需要使用过滤器(why),过滤器在什么时候用(when),接下来几篇就开始讲讲如何使用(how)。

.net core中的哪些过滤器的更多相关文章

  1. 文章翻译:ABP如何在EF core中添加数据过滤器

    原文地址:https://aspnetboilerplate.com/Pages/Documents/Articles%5CHow-To%5Cadd-custom-data-filter-ef-cor ...

  2. 第十五节:Asp.Net Core中的各种过滤器(授权、资源、操作、结果、异常)

    一. 简介 1. 说明 提到过滤器,通常是指请求处理管道中特定阶段之前或之后的代码,可以处理:授权.响应缓存(对请求管道进行短路,以便返回缓存的响应). 防盗链.本地化国际化等,过滤器用于横向处理业务 ...

  3. .net core中的哪些过滤器 (Authorization篇)

    前言 咱们上篇说到,过滤的简单介绍,但是未介绍如何使用,接下来几篇,我来给大家讲讲如何使用,今天第一篇是Authorization.认证过滤器, 开发环境介绍 开发工具:VS2019 开发环境:.ne ...

  4. ASP.NET Core中使用自定义MVC过滤器属性的依赖注入

    除了将自己的中间件添加到ASP.NET MVC Core应用程序管道之外,您还可以使用自定义MVC过滤器属性来控制响应,并有选择地将它们应用于整个控制器或控制器操作. ASP.NET Core中常用的 ...

  5. 如何在ASP.NET Core中编写高效的控制器

    ​通过遵循最佳实践,可以编写更好的控制器.所谓的"瘦"控制器(指代码更少.职责更少的控制器)更容易阅读和维护.而且,一旦你的控制器很瘦,可能就不需要对它们进行太多测试了.相反,你可 ...

  6. [转]ASP.NET Core 中文文档 第四章 MVC(4.3)过滤器

    本文转自:http://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-4_4_3-filters.html 原文:Filters 作者:Steve Smith 翻 ...

  7. ASP.NET Core 中文文档 第四章 MVC(4.3)过滤器

    原文:Filters 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:何镇汐 ASP.NET MVC 过滤器 可在执行管道的前后特定阶段执行代码.过滤器可以配置为全局有效.仅对控 ...

  8. ASP.NET Core中的ActionFilter与DI

    一.简介 前几篇文章都是讲ASP.NET Core MVC中的依赖注入(DI)与扩展点的,也许大家都发现在ASP.NET CORE中所有的组件都是通过依赖注入来扩展的,而且面向一组功能就会有一组接口或 ...

  9. 避免在ASP.NET Core中使用服务定位器模式

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:服务定位器(Service Locator)作为一种反模式,一般情况下应该避免使用,在 ...

随机推荐

  1. try with resource当中你没有注意到点。。

    怎么使用try with resource语法 在 JDK 9 中更简洁使用 try-with-resources 语句 try with resource当中你没有注意到点 try with res ...

  2. JS判断PC操作系统版本

    var version = navigator.userAgent; console.log(version); //"Mozilla/5.0 (Windows NT 10.0; WOW64 ...

  3. golang不想http自动处理重定向的解决方案

    目录 前言 解决方案 结论 前言     有时候发送http请求不想让库自动帮忙处理重定向,库里面默认的是会把所有重定向都完成一遍,结果就是最后一个没有重定向的请求的结果.因此需要一种方案直接获取首次 ...

  4. SpringBoot多任务Quartz动态管理Scheduler,时间配置,页面+源码

    页面展现 后台任务处理:恢复任务 15s执行一次后台打印消息 不BB了,直接上代码 import... /** * 调度工厂类 * Created by jinyu on 2018/4/14/014. ...

  5. 快速掌握ES6语法

    常量变量 let and const 先说说常量和变量的概念吧, 常量是说那种进行一次赋值后不会更改的值,比如说游戏账户的 ID, 变量是说赋值后有更改的需求的,比如游戏名,游戏密码. 在之前的 Ja ...

  6. python 不定长参数

    1 #不定长参数 * 元祖 ** 字典 2 def item(a,b,*c,**d): 3 print(a) 4 print(b) 5 print(c) 6 print(d) 7 8 item(11, ...

  7. 实时离线一体化在资产租赁saas服务中使用

    流水查询需求 需求第一期: 基于TB级的在线数据,支持缴费帐单明细在线查询.大家都知道,像银行帐单流水一样,查几年的流水是常有的事. 支持的维度查询:帐期.欠费状态.日期范围.费用科目类型.房屋分类. ...

  8. lumen容器模仿

    <?php class Container { private $bindings = []; private $instances = []; public function getClosu ...

  9. go 下载图片

    package main import ( "net/http" "fmt" "io/ioutil" "strings" ...

  10. php长时间的脚本,报502

    php-fpm超时时间设置request_terminate_timeout分析原创loophome 最后发布于2017-11-22 16:17:59 阅读数 21201 收藏展开今天发现了一个很神奇 ...