0

0

.NET中的中间件(Middleware)是什么?如何在ASP.NET Core中自定义一个?

幻夢星雲

幻夢星雲

发布时间:2025-11-21 12:24:59

|

714人浏览过

|

来源于php中文网

原创

中间件是ASP.NET Core中处理HTTP请求和响应的组件,按注册顺序组成管道,可执行前置逻辑、短路请求或后置处理。推荐通过类定义中间件,包含构造函数和InvokeAsync方法,并在Program.cs中用UseMiddleware注册;也可使用app.Use内联定义。执行顺序由注册顺序决定,如异常处理应置于前端以捕获后续异常,静态文件中间件若位于认证前则资源可匿名访问,合理设计中间件顺序有助于构建高效可维护的应用。

.net中的中间件(middleware)是什么?如何在asp.net core中自定义一个?

中间件(Middleware)是 ASP.NET Core 中用于处理 HTTP 请求和响应的组件。它按顺序组成一个请求管道,每个中间件可以决定是否将请求传递给下一个组件,也可以在请求前或响应后执行逻辑,比如身份验证、日志记录、异常处理等。

中间件的工作机制

请求进入应用后,会依次经过注册的中间件。每个中间件都有机会:

  • 在下一个中间件之前处理请求
  • 选择是否调用下一个中间件(不调用则短路管道)
  • 在响应返回时进行后续处理

中间件通过 UseRunMap 方法注册到管道中,顺序非常重要,因为执行顺序就是注册顺序。

如何自定义中间件

在 ASP.NET Core 中创建自定义中间件有推荐方式和传统方式两种,推荐使用基于类的方式,结构更清晰。

方式一:基于类的中间件(推荐)

创建一个类,包含一个构造函数和一个名为 InvokeInvokeAsync 的方法:

Vondy
Vondy

下一代AI应用平台,汇集了一流的工具/应用程序

下载
public class CustomHeaderMiddleware
{
private readonly RequestDelegate _next;

public CustomHeaderMiddleware(RequestDelegate next)
{
_next = next;
}

public async Task InvokeAsync(HttpContext context)
{
// 在请求前添加自定义响应头
context.Response.Headers["X-Custom-Header"] = "MyCustomValue";

// 调用管道中的下一个中间件
await _next(context);

// 可选:在响应返回后做些事情
// 例如记录状态码
Console.WriteLine($"Response status: {context.Response.StatusCode}");
}
}

然后在 Program.cs 中注册该中间件:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.UseMiddleware();
app.MapGet("/", () => "Hello World!");

app.Run();

方式二:使用 Use 扩展方法(内联写法)

适合简单逻辑,直接在 Program.cs 中使用 app.Use

app.Use(async (context, next) =>
{
context.Response.Headers["X-Simple-Header"] = "InlineValue";
await next(); // 继续执行下一个中间件
});

app.MapGet("/", () => "Hello from inline middleware!");

中间件的执行顺序注意事项

中间件的注册顺序直接影响行为。例如:

  • 异常处理中间件通常放在最前面(以便捕获后续所有异常)
  • 路由中间件要在使用路由功能的组件之前
  • 静态文件中间件如果放在认证之前,则静态资源无需认证即可访问

基本上就这些。自定义中间件是扩展 ASP.NET Core 功能的核心手段之一,理解其机制有助于构建高效、可维护的应用程序。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

177

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

212

2025.12.18

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

464

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

12

2025.12.06

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

74

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

28

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

59

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

35

2025.11.27

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 8.6万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.5万人学习

Vue 教程
Vue 教程

共42课时 | 6.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号