.NET6之MiniAPI(七):中间件

2023-11-05 20:08
文章标签 中间件 net6 miniapi

本文主要是介绍.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

这篇关于.NET6之MiniAPI(七):中间件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/352182

相关文章

Python3中Sanic中间件的使用

《Python3中Sanic中间件的使用》Sanic框架中的中间件是一种强大的工具,本文就来介绍Python3中Sanic中间件的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录Sanic 中间件的工作流程中间件的使用1. 全局中间件2. 路由中间件3. 异常处理中间件4. 异步中间件5. 优先级

开源分布式数据库中间件

转自:https://www.csdn.net/article/2015-07-16/2825228 MyCat:开源分布式数据库中间件 为什么需要MyCat? 虽然云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代。如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷。 MyCat的目标就是:低成本地将现有的单机数据库和应用平滑迁移到“云”端

基于shard-jdbc中间件,实现数据分库分表

一、水平分割 1、水平分库 1)、概念: 以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中。 2)、结果 每个库的结构都一样;数据都不一样; 所有库的并集是全量数据; 2、水平分表 1)、概念 以字段为依据,按照一定策略,将一个表中的数据拆分到多个表中。 2)、结果 每个表的结构都一样;数据都不一样; 所有表的并集是全量数据; 二、Shard-jdbc 中间件 1、架构图 2、特点

zdppy+vue3+onlyoffice文档管理系统实战 20240906 上课笔记 整合权限校验中间件

基于角色方法的中间件基本用法 import zdppy_api as apiimport zdppy_apimidauthasync def index(request):return api.resp.success()async def login(request):token = zdppy_apimidauth.get_role_token(role="admin")return ap

阿里中间件——diamond

一、前言        最近工作不忙闲来无事,仔细分析了公司整个项目架构,发现用到了很多阿里巴巴集团开源的框架,今天要介绍的是中间件diamond. 二、diamond学习笔记       1、diamond简介       diamond是一个管理持久配置(持久配置是指配置数据会持久化到磁盘和数据库中)的系统。无可厚非,淘宝内部正在使用diamond,在淘宝内部的绝大多数系统的配置都是由

Apache ShardingSphere数据分片弹性伸缩加解密中间件

Apache ShardingSphere Apache ShardingSphere 是一款分布式 SQL 事务和查询引擎,可通过数据分片、弹性伸缩、加密等能力对任意数据库进行增强。 软件背景 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互

Java web开发常见中间件多版本下载备用

备注:每次换电脑都要重新构建一下环境,下载找资源很麻烦,官网英文网页找个历史版本看不懂,还要慢慢去搜,所以直接整理一波,需要的自行收藏。 1.nodejs自选版本下载: 地址:https://nodejs.org/download/release/ 网速快,自选任何版本下载。 2.maven自选版本下载: 地址:https://archive.apache.org/dist/maven/

Gin框架中的全局中间件与中间件传值

Gin是一个用Go语言编写的Web框架,它以高性能和简洁的API而闻名。在Gin中,中间件是一种在请求处理流程中执行特定任务的函数,这些任务可能包括日志记录、用户认证、请求限流等。中间件可以在全局范围内使用,也可以仅应用于特定的路由或路由组。 全局中间件 全局中间件会应用于所有的请求,无论请求的路径是什么。在Gin中,可以通过r.Use()方法来注册全局中间件。注册的中间件会按照它们注册的顺序

FastAPI 中间件与依赖注入:打造灵活的 API 架构

在 FastAPI 中,Depends 是一个非常重要的概念,它用于依赖注入。依赖注入是一种设计模式,允许你将组件(如函数、类或服务)之间的依赖关系明确地表达出来,而不是硬编码在组件内部。这使得代码更加模块化、可测试和易于维护。 什么是 Depends? Depends 通常用于以下场景: 参数注入:将参数注入到路由处理函数中。服务注入:将服务或工具类的实例注入到路由处理函数中。前置验证:在

WEB服务与虚拟主机/IIS中间件部署

WWW(庞大的信息系统)是基于客户机/服务器⽅式的信息发现技术和超⽂本技术的综合。网页浏览器//网页服务器 WWW的构建基于三项核⼼技术: HTTP:超文本传输协议,⽤于在Web服务器和客户端之间传输数据。HTML:⽤于创建⽹⻚和⽹⻚应用的标准标记语言。URI(统一资源标识):URL(统一资源定位) URN(统一资源名称) 作为每个资源的地址,最常⻅的形式是URL 所有的URL都是URI,但