NetCore:理解中间件与过滤器

一个请求到达服务器以后,ASP.NET Core 应用使用 HTTP 服务器(Kestrel或IIS)侦听 HTTP 请求。 服务器将HTTP请求的所有信息封装到HttpContext呈现给应用程序。

应用程序依次调用配置的一系列中间件处理请求:

NetCore:理解中间件与过滤器

 

多个中间件组合在一起称作管道(PipeLine)。每个中间件在 HttpContext 上执行操作(修改或移除HttpContext上某些属性),操作完以后调用管道中的下一个中间件或终止请求。

处理管道(筛选器管道)在 ASP.NET Core 选择了要执行的操作(action)之后开始运行。它与业务关联紧密,中间件负责加工所有经过的请求,而筛选器负责筛选哪些请求是有效的哪些是无效的。

中间件做的这些处理与你的具体业务无关,它不关心你的请求是到哪个控制器,处理哪个Action,只要你进来你就要被我操作一遍,操作完成以后丢给处理管道(筛选器管道)。处理管道(筛选器管道)然后处理请求,在执行Action代码前后可能总是会要求请求匹配是否符合既定规则。

 

栗子:请求爱上了一个女孩,和她交往地很开心。所以请求便想到女孩家里去,他先去了名牌衣服店(中间件1)买了件称身的衣服,又去理发店(中间件2)收拾了下头发,然后打车直奔女孩家(路由Routing,这里是终结点中间件)。

当请求经受中间件一顿操作之后,到达调用管道(女孩子家门口即Controller对应的Action),这时请求本以为已经安全到达目的地,没想到敲门以后刚打开门,Action的妈妈拦在门口问你谁啊,你吧啦一通,她妈妈说不行你走吧,看不上你。告诉你她是授权筛选器,意思是你和她女儿Action的相遇没有经过她的同意,就被拒门外了。

请求很不开心,如果你要拒绝我为什么我还要在中间件管道内被操作一顿。请求不知道他应该感到幸运,因为过了她妈妈这关(授权筛选器),可能还有问你有房没有车没(资源筛选器),可能还要其他乱七八糟的要求。

请求也许会被拒,但请求永不放弃。

posted @ 2022-07-21 14:58  wzyandi  阅读(530)  评论(0编辑  收藏  举报