【4】Asp.Net Core2.2中间件多扩展对应应用
【前言】
上一篇完成了Asp.Net Core 2.2全新的管道处理模型解析,“俄罗斯套娃”式的委托嵌套和传递,组建了扩展性无与伦比的管道模型!与此同时,委托嵌套过于复杂,使用起来并不友好,然后多种扩展使用方式出现了,一起来看看吧!
【Run终结式扩展】
IApplicationBuilder里的Use方法需要一个Func<RequestDelegate, RequestDelegate>的参数,用来嵌套委托并搭建处理链条。但有些时候,并不需要这么麻烦,比如我们需要一个终结点的时候,可以直接使用Microsoft.AspNetCore.Builder里面的Run扩展。
只需要一个RequestDelegate参数,因为这里是最后一步处理了,可以如下使用:
这样配置之后,任何一个Http请求,都将是响应Hello World Run,后面的中间件都无法到达了。通常可以用来做一些终结式请求,比如一些黑名单请求直接终结掉!
【Use串联式扩展】
如果我们并不想终结请求了,除了默认的实例Use方法,这里还有个扩展的Use方法,来看看吧。
这里接受的middleware参数,跟之前的不太一样了,具体使用如下:
写成这样,和之前的差别就是少了一层委托包装,让大家更好理解,其实本质上还是利用了RequestDelegate的。这里运行效果跟之前的Use是一样的。
【UseWhen条件式扩展】
如果我们还有进一步的要求,希望在请求的过程中做一些判断过滤,满足条件的才执行某个中间件,这里就要用到UseWhen扩展了。
跟命名一样,就是加个条件判断后,然后增加对应的中间件,使用如下:
加了这个中间件后,如果Http请求的信息里面包含了Name,那么就会多一个响应,如果不包含,就没有这个中间件了,其他的中间件是不受影响的,很灵活。
【Map地址匹配扩展】
还有时候我们会希望对一些固定URL完成特别处理的,Map扩展可以帮助你!
这里可以直接对Url进行匹配,然后满足条件则可以去给IApplicationBuilder再绑定中间件了:
这里如果请求/Eleven则会终结式响应了。也许有小伙伴儿会问这个不是可以用路由完成吗?其实这里是为了在MVC(会有很多步骤)之前,就对一些特别的请求完成处理,提升性能!
【MapWhen 条件式终结扩展】
Map也提供了When的,不仅仅是可以判断Url了,还可以检测其他信息。
也是一个条件,一个对IApplicationBuilder的操作为参数,使用如下:
效果跟UseWhen很像,但核心差别在于UseWhen里面是可以继续next的,而MapWhen是没有next的!
【middleware类】
除了上面列出来的多种扩展方式,习惯.NetFramework开发的小伙伴儿,可能更喜欢用类的形式来完成中间件的注册,这里也提供了。下面声明一个middleware类:
这里既可以实现IMiddleware接口,然后注册,也可以不用接口约束,但是需要有两个规范:1 有一个带RequestDelegate参数的构造函数,拥有保存下一步的动作;2有一个参数为HttpContext的Invoke方法。
然后在前面就可以这样完成注册:
效果跟之前的Use一致,在程序启动时会通过反射来完成middleware类的初始化。
【结语】
本文整理了Asp.Net Core2.2中多种中间件的注册方式,只能说让开发变得轻松简单一些,也给予了更多的想象空间,但是中间件核心本质是没有变的,请一定不要误会了。中间件这一块儿,暂时就告一段落,等后面做一些具体实用的扩展再回来!下一篇文章中,Eleven将带大家去理解.Net Core中的依赖注入容器了,敬请关注!欢迎关注公众号,欢迎讨论,欢迎转发,愿天下有需求的人都能看到!
作者:Eleven
来源:公众号【软谋net】
想了解更多干货,欢迎关注公众号【程序员在职场】
程序员在职场
【4】Asp.Net Core2.2中间件多扩展对应应用的更多相关文章
- 在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制
Swashbuckle.AspNetCore3.0 介绍 一个使用 ASP.NET Core 构建的 API 的 Swagger 工具.直接从您的路由,控制器和模型生成漂亮的 API 文档,包括用于探 ...
- 一步一步带你做WebApi迁移ASP.NET Core2.0
随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP ...
- 【3】Asp.Net Core2.2新版管道处理模型
[前言] 上一篇完成了Asp.Net Core 2.2项目的一个最简单功能的添加,从控制器-视图-实体轻松交互了一下,感觉跟之前的MVC没啥差别!但这些都是在组件封装的基础上完成的,在Core里面,其 ...
- 【翻译】asp.net core2.1认证和授权解密
asp.net core2.1认证和授权解密 本篇文章翻译自:https://digitalmccullough.com/posts/aspnetcore-auth-system-demystifie ...
- WebApi迁移ASP.NET Core2.0
WebApi迁移ASP.NET Core2.0 一步一步带你做WebApi迁移ASP.NET Core2.0 随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的AS ...
- .Net Core技术研究-WebApi迁移ASP.NET Core2.0
随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP ...
- asp.net core2.1认证和授权解密
来源:https://www.cnblogs.com/pangjianxin/p/9372562.html asp.net core2.1认证和授权解密 本篇文章翻译自:https://digital ...
- 理解ASP.NET 5的中间件
今天推荐的这篇文章,讲述了如何实现和使用ASP.NET 5的中间件. 虽然在ASP.NET 5中,微软没有再强调OWIN(Open Web Interface for .NET)及其微软官方的OWIN ...
- 【翻译】asp.net core2.0中的token认证
原文地址:https://developer.okta.com/blog/2018/03/23/token-authentication-aspnetcore-complete-guide token ...
随机推荐
- 基于分支限界法的旅行商问题(TSP)二
和上篇一样,考前写写伪代码,考完了补上具体的解释和代码. 状态{矩阵,结果集,下界} 全局结果集列表,全局上界初始为Infinite 建立一个heap,存储状态,出堆规则为拥有最小的下界. 利用red ...
- 115个Java面试题和答案——终极列表(下)【转】
第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servle ...
- 【转】spring cloud eureka 参数配置
eureka.client.registry-fetch-interval-seconds 表示eureka client间隔多久去拉取服务注册信息,默认为30秒,对于api-gateway,如果要迅 ...
- OOP编程七大原则
OCP(Open-Closed Principle),开放封闭原则:软件实体应该扩展开放.修改封闭.实现:合理划分构件,一种可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里:一种可变性不应 ...
- php-msf 源码解读【转】
php-msf: https://github.com/pinguo/php-msf 百度脑图 - php-msf 源码解读: http://naotu.baidu.com/file/cc7b5a49 ...
- BigDecimal 专题
//****BigDecimal中传入的double类型的数据,要为String类型,不然得到在BigDecimal仍然是不准确的double数据**** // BigDecimal addend = ...
- 【链表】Bzoj1098[POI2007]办公楼biu
Description FGD开办了一家电话公司.他雇用了N个职员,给了每个职员一部手机.每个职员的手机里都存储有一些同事的电话号码.由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决 ...
- POJ_1066_Treasure Hunt_判断线段相交
POJ_1066_Treasure Hunt_判断线段相交 Description Archeologists from the Antiquities and Curios Museum (ACM) ...
- 最短路 BZOJ3694 树链剖分+线段树
分析: 树剖裸题,[Usaco2009 Jan]安全路经Travel 的简化版 剖开最短路树,遍历每一条没在最短路树上的边. 这种情况下,有且仅有u到v路径上,出来lca之外的点能够通过这条边到达,并 ...
- 【小白学C#】浅谈.NET中的IL代码
一.前言 前几天群里有位水友提问:”C#中,当一个方法所传入的参数是一个静态字段的时候,程序是直接到静态字段拿数据还是从复制的函数栈中拿数据“.其实很明显,这和方法参数的传递方式有关,如果是引用传递的 ...