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

ASP.NET中自定义中间件为何会阻止后续端点执行?

问题原因与解决方案

核心原因

你编写的TestMiddleware中间件没有将非/test路径的请求传递给后续中间件执行,直接中断了整个请求管道:

  • ASP.NET Core的请求处理是链式的中间件管道,每个中间件接收请求后,只有主动调用构造时注入的nextDelegate(也就是下一个中间件的执行委托),请求才会继续向后传递到后续的中间件、端点路由逻辑。
  • 你当前的Invoke方法逻辑中,只有请求路径等于/test时才有输出,其余场景下方法执行完毕后没有任何操作,也没有调用await nextDelegate(context),导致访问根路径/时,请求走到这个中间件就直接终止,不会执行后面UseEndpoints中配置的根路径返回逻辑。

修复方案

修改TestMiddleware的Invoke方法,在非/test路径的逻辑分支中调用后续中间件:

public async Task Invoke(HttpContext context, CapsDataContext dataContext)
{
    if (context.Request.Path == "/test")
    {
        await context.Response.WriteAsync($"There are {dataContext.Charges.Count()} charges.\n");
        await context.Response.WriteAsync($"There are {dataContext.Inventories.Count()} coils.\n");
        // 如果你希望访问/test时也执行后续逻辑,可以在这里也加await nextDelegate(context);
        return;
    }
    // 将非/test的请求传递给管道后续环节处理
    await nextDelegate(context);
}

修改后访问根路径就会正常返回Hello World!,同时/test路径的统计功能也不受影响。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:18:02