Тайм-аут запроса ASP.NET Core не срабатывает
Я не могу настроить автоматический запуск тайм-аута в предварительной версии ASP.NET Core 8.0.
https://learn.microsoft.com/en-us/aspnet/core/ Performance/timeouts?view=aspnetcore-8.0
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRequestTimeouts();
var app = builder.Build();
app.UseRequestTimeouts();
app.MapGet("/", async (HttpContext context) =>
{
try
{
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();
Ожидаемый результат: запуск тайм-аута через 1 секунду.
Фактический результат: возвращает успех через 10 секунд.
2 ответа
Когда вы запускаете приложение с подключенным отладчиком, проверка тайм-аута запроса пропускается.
Microsoft.AspNetCore.Http.Timeouts.RequestTimeoutsMiddleware
это добавлено сUseRequestTimeouts
содержит следующий код:
internal sealed class RequestTimeoutsMiddleware
{
public Task Invoke(HttpContext context)
{
if (Debugger.IsAttached)
{
return _next(context);
}
...
}
}