.NET6之MiniAPI(七):中间件

http协议,是由客户端发出请求,服务端响应结果并返回,我们把这个请求来回抽象成一个请求管道,那中间件就是这个管道上的阀门,控制着流量的进出和中断。每一个请求都要经过中间件的过滤,滤掉不合格的请求,放行合格的请求,比如用户验证,只有授权的用户通过,没有授权的用户挡在门外。

2f09109fdb0549a299f23dc39849139d.png

中间件的定义非常简单,如下:

var builder = WebApplication.CreateBuilder();
var app = builder.Build();
app.Use(async (context, next) =>
{//一通操作await next.Invoke();
});
app.MapGet("/test", () => "ok");
app.Run();

通过参数context来获取信息,从而判断是放行还是中断,当然有的中间件始终不会中间,只是收集请求的信息,以供别用,例如监控,只是采集信息而已。

中间件一个重要特点是有顺序的,有先来后到的,其实在整体请求链路上,中件间就像Queue里的元素,最先接到Request的中间件,最后返回Response,这种特点就要注意,当两个或多个中间件有依赖关系时,要设定好前后顺序,否则是没有作用的。官方文档给出了官方中间件使用顺序的一些建议,希望重视。

var builder = WebApplication.CreateBuilder();
var app = builder.Build();
app.Use(async (context, next) =>
{Console.WriteLine("{0},第1个中间——前", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.FFFFFFF"));await next.Invoke();Console.WriteLine("{0},第1个中间——后", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.FFFFFFF"));
});
app.Use(async (context, next) =>
{Console.WriteLine("{0},第2个中间——前", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.FFFFFFF"));await next.Invoke();Console.WriteLine("{0},第2个中间——后", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.FFFFFFF"));
});
app.MapGet("/test", () => "ok");
app.Run();

结果如下:

5623adb1021430380396d45f2f0ea7b1.png

自定义中间件类型

ThirdMiddleware中自定义的中间件类型,这是一种约定,构造中的next是从服务容器中获取的,代表着请求管道的传送委托。ThirdMiddlewareExtensions是对这个类型的扩展方法。

public class ThirdMiddleware
{private readonly RequestDelegate _next;public ThirdMiddleware(RequestDelegate next){_next = next;}public async Task InvokeAsync(HttpContext context){Console.WriteLine("{0},第3个中间——前", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.FFFFFFF"));await _next(context);Console.WriteLine("{0},第3个中间——后", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.FFFFFFF"));}
}public static class ThirdMiddlewareExtensions
{public static void UseThird(this WebApplication app){app.UseMiddleware<ThirdMiddleware>();}
}

那使用起来就比较简单了,只需要下面这个扩展方法调用就可以了。

app.UseThird();

结果

c511eabe9b6782ca4a5f20b3c0445e0d.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux之telnet命令使用

telnet命令通常用来远程登录。telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员&#xff0c;是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的 能力。在终端使用者的电脑上使用telnet程序&…

arraylist从大到小排序_经典排序方法的python实现和复杂度分析

1.冒泡排序:冒泡排序算法的运作如下&#xff1a;比较相邻的元素。如果第一个比第二个大(升序)&#xff0c;就交换他们两个。对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对。这步做完后&#xff0c;最后的元素会是最大的数。针对所有的元素重复以上的步…

HOOK学习笔记与心得

一、 Hook介绍钩子(Hook)&#xff0c;是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息&#xff0c;而且所监视的窗口可以是其他进程所创建的。当消息到达后&#xff0c;在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理wind…

access函数_ACCESS中的DLookUp函数是如何运算的?

​一、DLookUp函数介绍1. DLookUp函数的用途&#xff1a;可以用于从指定集合(一个域)中获取符合条件的特定字段的值。2. DLookUp函数的格式为&#xff1a;DLookUp( expr , domain , [criteria] )其中&#xff1a;expr 为字段名&#xff0c;或以字段名为基础的表达式字符串domai…

汇编语言之基础知识

1、机器语言 说到汇编语言的产生&#xff0c;首先要讲一下机器语言。机器语言是机器指令的集合。什么是机器指令&#xff1f;我们在使用CE时&#xff0c;常常见到。 请看下图&#xff1a; 图中所示的就是机器指令&#xff08;或称机器码&#xff09;&#xff0c;这是十六进制的…

Entity Framework 简单增删改操作

前言 在 Entity Framework 简单查询操作 中主要是学习了在Entity Framework中的几种不同模式的查询操作&#xff0c;现在主要来学习一下简单的增加、删除、修改操作。 增加 在EF中添加操作一般有两种方式&#xff1a;一是直接创建对象&#xff0c;然后调用“DbSet”的”Add()”…

华为云服务器初探二(完结)

在上一篇《华为云服务器初探》 中介绍了在使用华为云服务器部署时的一些关键点&#xff0c;本篇继续&#xff0c;内容涉及如下:中间件的部署问题解决NAT 网关使用数据库服务的访问dotNET Core 程序的构建Redis首先更正上一篇中的一个错误&#xff0c;在运行参数中进行密码设置&…

for in for of区别_Python 第5课:for…in循环黄金搭档之列表

乐学趣学Py● 05&#xff1a;for…in循环黄金搭档之列表●Python趣味小百科Python程序中有一个有彩蛋&#xff0c;在IDLE Pythton模式下输入import this会出现一首(The Zen of Python, by Tim Peters)‘Pyton之禅’的小诗。这首小诗表明了用Python编写代码时遵循的原则&#xf…

开源虎墩同名电影《小虎墩大英雄》定档大年初一

文末有福利&#xff0c;记得看到最后哦~| 作者&#xff1a;虎虎生风的开源虎墩组| 编辑&#xff1a;刘雪洁| 责编&#xff1a;王玥敏开源虎墩诞生记&#xff1a;小源机器人2.0大家还记得 2020 疫情肆虐的时候开源社与来自全国各地的开源爱好者隔空合作&#xff0c;共同打造的疫…

HYDRAstor:可扩展的二级存储

为什么80%的码农都做不了架构师&#xff1f;>>> 原文&#xff1a;HYDRAstor: a Scalable Secondary Storage. HYDRAstor&#xff08;官网&#xff09;是NEC推出的二级存储系统,先后有多篇关于HYDRAstor的论文发表在FAST&#xff08;包括后来9livesdata发表的论文&a…

汇编语言之寄存器(CPU工作原理)

1、介绍 一个典型的CPU&#xff0c;由运算器、控制器、寄存器等器件组成&#xff0c;对于游戏修改者来说&#xff0c;重点学习寄存器&#xff0c;其它不必管。 不同的CPU&#xff0c;寄存器的个数、结构是不相同的&#xff0c;8086CPU有14个寄存器&#xff0c;每个寄存器有一个…

学好英语网首页制作_没有美术基础的新手小白,如何学好淘宝美工?

没有美术基础的新手小白&#xff0c;如何学好淘宝美工&#xff1f;俗话说&#xff1a;万事开头难&#xff0c;没有任何基础、没有美术基础学淘宝美工&#xff0c;要怎么学习好呢&#xff1f;显然&#xff0c;作为一名没有美术基础的新手小白&#xff0c;一般开始学习的时候都是…

14岁上中科大,18岁攻读麻省博士,28岁成为哈佛最年轻副教授,“华人女天才”的开挂人生...

全世界只有3.14 % 的人关注了爆炸吧知识哈佛年纪最小的副教授是中国人1997年美国颁发的罗伯特里得奖获得者蔡天西&#xff0c;22岁获国际生物统计学协会颁发的极大成就"半参数随机"奖&#xff0c;28岁成为哈佛最年轻的女性副教授&#xff0c;香港、美国、著名学术刊物…

汇编语言之寄存器(内存访问)

1、内存中字的存储 2、ds和【address】 CPU要读写一个内存单元的时候&#xff0c;必须先给出这个内存单元的地址&#xff0c;在8086CPU中&#xff0c;内存地址由段地址和偏移地址组成&#xff0c; 其中&#xff0c;段地址存放在段寄存器DS中&#xff0c;DS称作数据段寄存器。…

用sort()方法随机打乱数组

2019独角兽企业重金招聘Python工程师标准>>> 我们先看一下随机数组排序的示例&#xff0c;再来研究其中的原理。 随机数组排序示例 var numbers [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411]; numbers numbers.sort(function(…

Linux下部署Kubernetes+Kubesphere(一)Kubernetes基础

1.服务器规划为配置Kubesphere高可用集群&#xff0c;需要三台或三台以上机器作为Master节点&#xff0c;每台机器既可以作为Master也可以作为Worker节点。其中Master节点数量建议为单数。该示例中采用三台服务器&#xff0c;即作为Master节点也作为Worker节点&#xff0c;配置…