欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【4】Asp.Net Core2.2中间件多扩展对应应用

程序员文章站 2022-04-08 17:50:34
【前言】 上一篇完成了Asp.Net Core 2.2全新的管道处理模型解析,“俄罗斯套娃”式的委托嵌套和传递,组建了扩展性无与伦比的管道模型!与此同时,委托嵌套过于复杂,使用起来并不友好,然后多种扩展使用方式出现了,一起来看看吧! 【Run终结式扩展】 IApplicationBuilder里的U ......

【前言】

上一篇完成了asp.net core 2.2全新的管道处理模型解析,“俄罗斯套娃”式的委托嵌套和传递,组建了扩展性无与伦比的管道模型!与此同时,委托嵌套过于复杂,使用起来并不友好,然后多种扩展使用方式出现了,一起来看看吧!

 

【run终结式扩展】

 

iapplicationbuilder里的use方法需要一个func<requestdelegate, requestdelegate>的参数,用来嵌套委托并搭建处理链条。但有些时候,并不需要这么麻烦,比如我们需要一个终结点的时候,可以直接使用microsoft.aspnetcore.builder里面的run扩展。

【4】Asp.Net Core2.2中间件多扩展对应应用

 

 

只需要一个requestdelegate参数,因为这里是最后一步处理了,可以如下使用:

【4】Asp.Net Core2.2中间件多扩展对应应用

 

 

这样配置之后,任何一个http请求,都将是响应hello world run,后面的中间件都无法到达了。通常可以用来做一些终结式请求,比如一些黑名单请求直接终结掉!

 

【use串联式扩展】

 

如果我们并不想终结请求了,除了默认的实例use方法,这里还有个扩展的use方法,来看看吧。

【4】Asp.Net Core2.2中间件多扩展对应应用

 

 

这里接受的middleware参数,跟之前的不太一样了,具体使用如下:

【4】Asp.Net Core2.2中间件多扩展对应应用

 

 

写成这样,和之前的差别就是少了一层委托包装,让大家更好理解,其实本质上还是利用了requestdelegate的。这里运行效果跟之前的use是一样的。

 

【usewhen条件式扩展】

 

如果我们还有进一步的要求,希望在请求的过程中做一些判断过滤,满足条件的才执行某个中间件,这里就要用到usewhen扩展了。

【4】Asp.Net Core2.2中间件多扩展对应应用

 

 

跟命名一样,就是加个条件判断后,然后增加对应的中间件,使用如下:

【4】Asp.Net Core2.2中间件多扩展对应应用

 

 

加了这个中间件后,如果http请求的信息里面包含了name,那么就会多一个响应,如果不包含,就没有这个中间件了,其他的中间件是不受影响的,很灵活。

 

【map地址匹配扩展】

 

还有时候我们会希望对一些固定url完成特别处理的,map扩展可以帮助你!

【4】Asp.Net Core2.2中间件多扩展对应应用

 

 

这里可以直接对url进行匹配,然后满足条件则可以去给iapplicationbuilder再绑定中间件了:

【4】Asp.Net Core2.2中间件多扩展对应应用

 

 

这里如果请求/eleven则会终结式响应了。也许有小伙伴儿会问这个不是可以用路由完成吗?其实这里是为了在mvc(会有很多步骤)之前,就对一些特别的请求完成处理,提升性能!

 

【mapwhen 条件式终结扩展】

 

map也提供了when的,不仅仅是可以判断url了,还可以检测其他信息。

【4】Asp.Net Core2.2中间件多扩展对应应用

 

 

也是一个条件,一个对iapplicationbuilder的操作为参数,使用如下:

【4】Asp.Net Core2.2中间件多扩展对应应用

 

 

效果跟usewhen很像,但核心差别在于usewhen里面是可以继续next的,而mapwhen是没有next的!

 

【middleware类】

 

除了上面列出来的多种扩展方式,习惯.netframework开发的小伙伴儿,可能更喜欢用类的形式来完成中间件的注册,这里也提供了。下面声明一个middleware类:

【4】Asp.Net Core2.2中间件多扩展对应应用

 

 

这里既可以实现imiddleware接口,然后注册,也可以不用接口约束,但是需要有两个规范:1 有一个带requestdelegate参数的构造函数,拥有保存下一步的动作;2有一个参数为httpcontext的invoke方法。

 

然后在前面就可以这样完成注册:

【4】Asp.Net Core2.2中间件多扩展对应应用

 

 

效果跟之前的use一致,在程序启动时会通过反射来完成middleware类的初始化。

 

【结语】

本文整理了asp.net core2.2中多种中间件的注册方式,只能说让开发变得轻松简单一些,也给予了更多的想象空间,但是中间件核心本质是没有变的,请一定不要误会了。中间件这一块儿,暂时就告一段落,等后面做一些具体实用的扩展再回来!下一篇文章中,eleven将带大家去理解.net core中的依赖注入容器了,敬请关注!欢迎关注公众号,欢迎讨论,欢迎转发,愿天下有需求的人都能看到!

 

作者:eleven

来源:公众号【软谋net】

 

想了解更多干货,欢迎关注公众号【程序员在职场

【4】Asp.Net Core2.2中间件多扩展对应应用

                  程序员在职场