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

ASP.NET Core 8.0 Preview请求超时未自动触发问题

ASP.NET Core 8.0 Preview 请求超时不触发问题排查

你配置了请求超时中间件并为端点设置1秒超时,但实际请求10秒后返回成功,未触发超时。以下是排查和解决方向:

  • 升级至最新Preview/RC版本
    ASP.NET Core 8.0早期Preview版本存在请求超时中间件的已知bug,部分版本中端点级超时未正确绑定到HttpContext.RequestAborted令牌,升级到最新Preview或候选发布版(RC)可修复该问题。

  • 确认中间件顺序
    确保UseRequestTimeouts在所有端点映射(如MapGet)之前调用,你的代码中顺序正确,但后续添加其他中间件时,需保证请求超时中间件优先于端点处理逻辑执行。

  • 检查令牌是否被覆盖
    排查是否有其他中间件或自定义代码修改了HttpContext.RequestAborted令牌,比如全局异常处理中间件、自定义过滤器意外替换取消令牌,导致超时信号无法传递到耗时操作。

  • 避免测试工具干扰
    使用Postman、curl等工具发起请求,避免浏览器的连接复用、自动重试机制影响测试结果。例如执行:

    curl http://localhost:5000/
    

确认代码关键步骤

你的代码逻辑本身无问题,需确保以下核心配置正确:

var builder = WebApplication.CreateBuilder(args);

// 注册请求超时服务
builder.Services.AddRequestTimeouts();

var app = builder.Build();

// 启用请求超时中间件(必须在端点映射前调用)
app.UseRequestTimeouts();

app.MapGet("/", async (HttpContext context) =>
    {
        try
        {
            // 必须将RequestAborted令牌传入耗时操作
            await Task.Delay(TimeSpan.FromSeconds(10), context.RequestAborted);
        }
        catch (TaskCanceledException)
        {
            return Results.Content("Timeout!", "text/plain");
        }

        return Results.Content("No timeout.", "text/plain");
    })
    // 绑定端点级超时
    .WithRequestTimeout(TimeSpan.FromSeconds(1));

app.Run();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:12:57