ASP.NET Core中的Middleware(中间件)是一种可以装配到应用处理管道中的组件,用于拦截请求和响应并进行进一步处理。ASP.NET Core中大量的内置功能都是通过中间件实现的,比如身份验证、授权、CORS限制等,实际开发中我们也可以自定义中间件,实现我们自己的业务逻辑。
自定义中间件最简单的方式是使用Lambda函数,我们直接在WebApplication
对象上调用Use()
方法并向其中传入我们自定义的中间件逻辑。
app.Use(async (context, next) =>
{
Console.WriteLine($"收到请求 {context.Request.GetDisplayUrl()}");
await next();
Console.WriteLine("请求处理完成");
});
如果我们的中间件代码比较复杂,也可以将其抽取到单独的类中,下面是一个例子。
using Microsoft.AspNetCore.Http.Extensions;
namespace DemoWebAPI.Middlewares;
public class MyLogMiddleware
{
private RequestDelegate _next;
public MyLogMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
Console.WriteLine($"收到请求 {context.Request.GetDisplayUrl()}");
await _next(context);
Console.WriteLine("请求处理完成");
}
}
public static class MyLogMiddlewareExtensions
{
public static IApplicationBuilder UseMyLog(this IApplicationBuilder builer)
{
return builer.UseMiddleware<MyLogMiddleware>();
}
}
中间件类需要满足几个要求,它的构造函数要传入RequestDelegate
委托,此外还要对外暴露一个InvokeAsync()
方法,我们在该方法中编写具体的中间件逻辑。这里我们还对IApplicationBuilder
添加了一个方法扩展UseMyLog()
方便注册我们的自定义中间件。