有关IApplicationBuilder接口的
(关键词是:asp.net管道)
在ASP.NET Core中,管道是一个请求处理流程,由多个中间件按顺序组成,每个中间件都是一个处理单元,负责处理HTTP请求或响应,管道的主要作用是将复杂的请求处理逻辑分解为多个小的、可重用的组件,管道的工作流程可以分为两个阶段:请求阶段和响应阶段。
阶段 | 描述 |
请求阶段 | HTTP请求进入管道后,依次经过每个中间件,每个中间件可以对请求进行处理,并决定是否调用下一个中间件,如果某个中间件不调用下一个中间件,管道会短路,后续中间件不会执行。 |
响应阶段 | 当某个中间件生成响应后,响应会逆向经过每个中间件,每个中间件可以对响应进行处理,最终返回给客户端。 |
管道的核心是基于委托(Delegate)和上下文(Context)的机制,RequestDelegate表示处理HTTP请求的委托,其签名为Task(HttpContext),HttpContext封装了HTTP请求和响应的所有信息,包括请求头、请求体、响应头、响应
| 名称 | 功能 |
| –| 传递给下一个中间件 | 封装HTTP请求和响应的所有信息 |
| RequestDelegate | 表示处理 HTTP 请求的签名 | 包含请求和响应的所有信息 |
| HttpContext | 特性 | 包括请求头、请求体、响应头、响应体等 |
| 每个中间件本质上是一个RequestDelegate,它接收HttpContext并处理请求,同时可以选择调用下一个中间件。 |
中间件是管道的基本组成单元,通常通过Use、Run或Map方法添加到管道中。
方法 | 描述 |
Use | 用于添加一个可以调用下一个中间件的中间件 |
Run | 用于添加一个终止中间件,不会调用下一个中间件 |
Map | 用于根据请求路径分支管道 |
示例代码 |
app.Use(async (context, next) => { // 处理请求 await next(); // 调用下一个中间件 // 处理响应 });
| app.Run(async context => { await context.Response.WriteAsync("终止中间件!"); });
| app.Map("/admin", adminApp => { adminApp.Run(async context => { await context.Response.WriteAsync("Index"); }); }
| 自定义中间件示例 |
public class CustomMiddleware { private readonly RequestDelegate _next; public CustomMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { await context.Response.WriteAsync("调用之前。。。"); await _next(context); await context$