在ASP.NET Core中,中间件是组成请求处理管道的一系列组件,每个中间件都有权决定请求如何被处理,以及是否要终止请求的处理并直接返回响应。
中间件通过 Use
和 Run
方法进行配置,这两种方法都定义在 IApplicationBuilder
接口中。
以下是一个简单的中间件示例,它创建了一个简单的中间件,记录每个请求的执行时间,并在请求结束时打印出来:
public class RequestTimingMiddleware
{
private readonly RequestDelegate _next;
public RequestTimingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
var stopwatch = Stopwatch.StartNew(); // 开始计时
// 在调用下一个中间件之前可以做一些事情
await _next(context); // 调用下一个中间件
// 请求处理完成后记录时间
stopwatch.Stop();
Console.WriteLine($"Request for {context.Request.Path} finished in {stopwatch.ElapsedMilliseconds} ms");
}
}
// 在 Startup.cs 中配置中间件
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
// 添加自定义中间件
app.UseMiddleware<RequestTimingMiddleware>();
// ...
}
在这个示例中,RequestTimingMiddleware
类封装了中间件的逻辑,它有一个 InvokeAsync
方法,该方法是实际处理请求的地方。在这个方法中,它使用 Stopwatch
来计时请求的执行时间,并在请求结束后打印出执行时间。
在 Configure
方法中,我们通过 UseMiddleware<T>
方法添加了自定义的中间件到请求处理管道中。这个方法需要一个类型参数,指定了中间件的类。
这只是中间件的一个简单示例,实际中间件可以用于身份验证、日志记录、异常处理、缓存、响应压缩等许多其他目的。