builder.Services.AddRequestTimeouts - 504网关超时

前端开发 2026-07-08

我已经完成了所有设置,但仍然不起作用。我配置了 program.cs 文件,将来自 AddRequestTimeouts 的策略添加到控制器,结果仍然返回504错误。

我在 program.cs 文件和控制器中将超时设置为只有在10分钟后才返回超时,但是无论如何,它在30秒后仍然返回一个HTML消息。

有谁知道我应该怎么做才能解决这个问题吗?

返回Postman

<html>

    <body>
        <h1>504 Gateway Time-out</h1>
        The server didn't respond in time.
    </body>

</html>

Program.cs:

builder.Services.AddRequestTimeouts(options =>
            {
                options.DefaultPolicy = new RequestTimeoutPolicy { Timeout = TimeSpan.FromSeconds(60) };
                options.AddPolicy("LongTimeout", new RequestTimeoutPolicy { Timeout = TimeSpan.F romMinutes(5) });
            });

var app = builder.Build();

app.UseRouting();
app.UseRequestTimeouts();
app.MapControllers();

app.Run();

控制器

[HttpPost]
[Route("import-file")]
[RequestTimeout("LongTimeout")]
public async Task<IActionResult> ImportFile([FromForm] ImportFileCommand command) 
    => await ActionResultBaseExecute(command);

解决方案

首先,我会确保这不是Postman本身的特定问题。

为此,我会暂时为你的超时定义明确的状态码:

builder.Services.AddRequestTimeouts(o =>
{
    o.DefaultPolicy = new RequestTimeoutPolicy()
    {
        Timeout = TimeSpan.FromSeconds(3),
        TimeoutStatusCode = 501
    };
    o.AddPolicy(
        "LongTimeout", 
        new RequestTimeoutPolicy 
        { 
            Timeout = TimeSpan.FromSeconds(5),
            TimeoutStatusCode = 502
        });
});

当然,尝试调整超时数值,以进一步缩小问题范围。

然后,如果你是在本机测试,请确保不要附加调试器(这样超时才会生效)——但我相信你已经做过了。

最后但同样重要的是,在Visual Studio之外运行程序时,请确保修改后重新构建项目。有时,如果只是用 dotnet run 运行,可能会使用到过时的二进制文件。

参考: ASP.NET Core的请求超时中间件

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章