当前位置:首页 > C# > 正文

深入理解 ASP.NET Core 中间件(从零开始编写与注册自定义中间件)

在 ASP.NET Core 开发中,中间件(Middleware) 是处理 HTTP 请求和响应的核心组件。通过合理使用中间件,你可以实现身份验证、日志记录、错误处理等通用功能。本文将手把手教你如何编写和注册自定义中间件,即使你是 C# 编程的新手,也能轻松掌握!

深入理解 ASP.NET Core 中间件(从零开始编写与注册自定义中间件) Core中间件 中间件注册 C# Web开发 自定义中间件 第1张

什么是 ASP.NET Core 中间件?

中间件是一段处理 HTTP 请求和响应的代码。多个中间件按顺序组成一个“管道”(Pipeline),每个请求依次通过这些中间件。你可以把中间件想象成工厂流水线上的工作站:每个站完成特定任务,然后把产品传递给下一个站。

常见的内置中间件包括静态文件服务、路由、身份认证等。而我们今天要学习的是如何创建自己的中间件来满足特定业务需求。

第一步:创建自定义中间件类

在你的 ASP.NET Core 项目中,新建一个文件夹(例如 Middlewares),然后创建一个 C# 类文件,比如 RequestLoggingMiddleware.cs

using Microsoft.AspNetCore.Http;using System.Threading.Tasks;using System.Diagnostics;namespace YourProject.Middlewares{    public class RequestLoggingMiddleware    {        private readonly RequestDelegate _next;        public RequestLoggingMiddleware(RequestDelegate next)        {            _next = next;        }        public async Task InvokeAsync(HttpContext context)        {            var stopwatch = Stopwatch.StartNew();            await _next(context); // 调用管道中的下一个中间件            stopwatch.Stop();            // 记录请求路径和处理时间            var logMessage = $"[{DateTime.UtcNow}] {context.Request.Method} {context.Request.Path} - {stopwatch.ElapsedMilliseconds}ms";            Console.WriteLine(logMessage);        }    }}

这个中间件的作用是在控制台输出每个请求的方法、路径和处理耗时。注意几个关键点:

  • RequestDelegate _next:代表管道中的下一个中间件。
  • InvokeAsync 方法:这是中间件的入口方法,必须是 public 且返回 Task
  • 调用 await _next(context) 表示将请求传递给下一个中间件。

第二步:注册中间件到应用管道

仅仅编写中间件还不够,你还需要在 Program.cs(或旧版本的 Startup.cs)中将其注册到请求处理管道中。

在 .NET 6 及以上版本(使用顶层语句)的 Program.cs 中,添加如下代码:

var builder = WebApplication.CreateBuilder(args);var app = builder.Build();// 注册自定义中间件(注意顺序!)app.UseMiddleware<YourProject.Middlewares.RequestLoggingMiddleware>();app.MapGet("/", () => "Hello World!");app.Run();

中间件的注册顺序非常重要!请求会按照 Use... 的顺序依次进入,再以相反顺序返回。因此,像日志、异常处理这类通用中间件通常放在最前面。

进阶技巧:使用扩展方法简化注册

为了让中间件注册更简洁,我们可以创建一个扩展方法:

using Microsoft.AspNetCore.Builder;namespace YourProject.Middlewares{    public static class RequestLoggingMiddlewareExtensions    {        public static IApplicationBuilder UseRequestLogging(            this IApplicationBuilder builder)        {            return builder.UseMiddleware<RequestLoggingMiddleware>();        }    }}

然后在 Program.cs 中就可以这样调用:

app.UseRequestLogging(); // 更清晰、更语义化

总结

通过本教程,你已经学会了如何在 ASP.NET Core 中间件 中编写和注册自定义逻辑。无论是用于日志记录、性能监控还是安全控制,中间件都是 C# Web 开发 中不可或缺的工具。

记住以下要点:

  • 中间件必须包含 InvokeAsyncInvoke 方法。
  • 通过 UseMiddleware<T>() 或自定义扩展方法注册。
  • 中间件执行顺序由注册顺序决定,务必合理安排。

现在,你可以尝试编写自己的中间件了!比如添加 IP 白名单、请求频率限制等功能。祝你在 自定义中间件 的开发之旅中收获满满!

关键词:ASP.NET Core中间件, 中间件注册, C# Web开发, 自定义中间件