.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;最后的元素会是最大的数。针对所有的元素重复以上的步…

AfxMessageBox和MessageBox差别

假设用MFC的话&#xff0c;请尽量使用afxmessagebox&#xff0c;由于这个全局的对话框最安全&#xff0c;也最方便。 可是在WIN32 SDK的情况下仅仅能使用MESSAGEBOX。 MessageBox()是Win32API函数.后者是mfc中的全局函数&#xff0e;在MFC中能用MessageBox()的地方都能用AfxM…

[单刷 APUE 系列] 第十四章——高级 I/O

非阻塞I/O 在最前面&#xff0c;我们讲过IO分成带缓冲的IO和不带缓冲的IO&#xff0c;但是实际上&#xff0c;这个区别并不是很大&#xff0c;因为缓冲区并没有影响到实际的读写。我们知道&#xff0c;系统调用实际上分成两种&#xff0c;高速的系统调用和低速的系统调用&#…

正则表达式的简单应用

1. 正则表达式(1) 什么是正则表达式&#xff1f;正则表达式是一种功能强大而灵活的文本处理工具。(2) 正则表达式的主要作用正则表达式主要用于&#xff1a;验证字符串&#xff0c;即检验输入的字符串是否符合给定的模式。例如&#xff0c;验证输入的电话号码、手机号码、号码等…

Prism区域异常问题分析(导航失效?)

前文本篇文章主要讨论在WPF当中使用Prism区域导航的失效的问题, 在其它的博客当中也出现了多次讨论这个问题以及对应的解决方法,例如重写OnInitialized方法等等。我认为这都不是解决问题的根源, 既然如此, 下面我们将来分析Prism的IRegionManager的具体流程。Prism初始化过程首…

HOOK学习笔记与心得

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

使用SQLServer2005插入一条数据时返回当前插入数据的ID

使用SQLServer2005插入一条数据时返回当前插入数据的ID在执行完插入后 再执行 select identity from users 就OK 就是刚才插入的那行的 ID了 补充&#xff1a; identity 表示当前新增的主键ID这个是在一个session中查找的&#xff0c;SELECT MAX(id) FROM Users 执行这个查询,就…

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

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

atitit。wondows 右键菜单的管理与位置存储

atitit。wondows 右键菜单的管理与位置存储 原理 。这样的功能称为Windows外壳扩展(Shell Extensions) 1 常用右键菜单 atiContentMenu1 通用tool1 文件夹的右键菜单位置3 所有的文件的右键菜单位置3 右键菜文件夹模式3 原理 。这样的功能称为Windows外壳扩展(Shell Extensions…

汇编语言之基础知识

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;在运行参数中进行密码设置&…

C# 对Datatable排序

一&#xff0c;在C#中要对Datatable排序&#xff0c;可使用DefaultView的Sort方法。先获取Datatable的DefaultView&#xff0c;然后设置 得到的Dataview的sort属性&#xff0c;最后用视图的ToTable方法将排好序的dataview导出为Datatable。 代码如下&#xff1a; …

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…

Android官方开发文档Training系列课程中文版:Android的安全建议 .

转载:http://blog.csdn.net/sahadev_/article/details/52949855 原文地址:http://android.xsoftlab.net/training/articles/security-tips.html Android系统内置的安全策略可以有效的降低应用程序的安全问题。所以默认创建的应用程序已经包含了一定程度的安全保护措施。 Andr…

PHP提取字符串中的数字

function number($str) {return preg_replace(/\D/s, , $str); } // echo 123456 echo number(Hello 123 world 456 !!); //支持小数 function number($str) { return preg_replace(/[^\.0123456789]/s, , $str); } 转载于:https://www.cnblogs.com/shcolo/p/5945192.html