Middleware中间件

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()方便注册我们的自定义中间件。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap