如何在 ASP.NET Core 配置请求超时中间件

写在前面

本文参考官方文档,使用Asp.net core 8.0 的最小API 模板项目,配置超时中间件。

超时中间件可用于所有类型的ASP.NET Core应用:最小 API、带控制器的 Web API、MVC 和 Razor Pages。请求超时的属性位于命名空间 Microsoft.AspNetCore.Http.Timeouts 中。

需要注意的是,当应用在调试模式下运行时,超时中间件不会触发。要测试超时,请运行未附加调试器的应用。

代码实现

using Microsoft.AspNetCore.Http.Timeouts;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddRequestTimeouts();

var app = builder.Build();
app.UseRequestTimeouts();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

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(2));
// Returns "Timeout!"

// 属性将终结点配置为超时
app.MapGet("/attribute",
    [RequestTimeout(milliseconds: 2000)] 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");
    });

app.Run();

调用示例

使用调试模式运行: 

不会触发超时

 非调试模式下运行

与预期一致触发了超时

 

相关推荐

  1. 【爬虫】Scrapy中配置随机User-Agent中间

    2024-01-20 07:24:03       32 阅读
  2. 中间

    2024-01-20 07:24:03       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-20 07:24:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-20 07:24:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-20 07:24:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-20 07:24:03       20 阅读

热门阅读

  1. 【话题】自然语言处理的发展

    2024-01-20 07:24:03       31 阅读
  2. 【数据库原理】(33)数据库实施阶段

    2024-01-20 07:24:03       32 阅读
  3. Android 13.0 Recent列表不显示某个app

    2024-01-20 07:24:03       27 阅读
  4. Wargames与bash知识21

    2024-01-20 07:24:03       27 阅读
  5. Godot FileDialog无法访问其它盘符的文件

    2024-01-20 07:24:03       36 阅读
  6. Unity文字游戏开发日志(2)——存档与读档

    2024-01-20 07:24:03       33 阅读
  7. UI -- UniApp

    2024-01-20 07:24:03       30 阅读
  8. Webpack5入门到原理11:处理 js 资源

    2024-01-20 07:24:03       31 阅读
  9. C语言再学习 -- C语言搭建TCP服务器/客户端

    2024-01-20 07:24:03       39 阅读