详解如何在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();
调用示例
使用调试模式运行:
不会触发超时
非调试模式下运行
与预期一致触发了超时
到此这篇关于详解如何在ASP.NET Core配置请求超时中间件的文章就介绍到这了,更多相关.NET配置请求超时中间件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
C#中的multipart/form-data提交文件和参数
这篇文章主要介绍了C#中的multipart/form-data提交文件和参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-06-06
最新评论