You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JwtMiddleware的Invoke仅在请求阶段触发,响应阶段不触发是否正常?

问题解答

这属于正确行为,原因如下:

  • ASP.NET Core中间件的执行遵循请求管道的顺序:请求进入时按中间件注册顺序依次执行Invoke方法,响应返回时则按相反顺序执行中间件中await _next(context)之后的逻辑。
  • 当你在控制器动作里调用Ok()方法时,请求已经走完了进入方向的中间件管道(包括你的JwtMiddleware的Invoke方法),此时只是生成了响应结果,不会重新触发中间件的Invoke方法。
  • 若要在响应阶段执行逻辑,需要在JwtMiddleware的Invoke方法里,在调用await _next(context)之后添加响应处理代码——_next(context)代表将请求传递到下一个中间件或控制器,当这个调用返回时,就进入了响应返回阶段,此时可以处理响应内容。

举个中间件示例:

public class JwtMiddleware
{
    private readonly RequestDelegate _next;

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

    public async Task Invoke(HttpContext context)
    {
        // 请求进入时的逻辑(客户端调用动作时执行)
        Console.WriteLine("请求进入JwtMiddleware");

        // 传递请求到后续管道环节
        await _next(context);

        // 响应返回时的逻辑(控制器返回Ok后执行)
        Console.WriteLine("响应离开JwtMiddleware");
    }
}

简言之:Invoke方法在请求进入时执行一次,响应返回时仅执行_next之后的代码,不会再次触发整个Invoke方法,你遇到的情况完全符合ASP.NET Core中间件的执行机制。

内容的提问来源于stack exchange,提问作者Janciu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:15:37