翼度科技»论坛 编程开发 .net 查看内容

实时监控.NET Core请求次数:创建记录最近5分钟的请求,轻松可靠

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
 
概述:在.NET Core中,通过创建RequestCountMiddleware中间件,结合MemoryCache,实现了记录最近5分钟请求次数的功能。该中间件在每个请求中更新计数,并使用缓存存储,为简单而实用的请求监控提供了一个示例。
要实现一个在.NET Core中记录最近5分钟请求次数的RequestCountMiddleware,你可以按照以下步骤操作。在这个例子中,我们将使用MemoryCache来存储请求计数。

  • 创建中间件类:
  1. using Microsoft.AspNetCore.Builder;
  2. using Microsoft.AspNetCore.Http;
  3. using Microsoft.Extensions.Caching.Memory;
  4. using System;
  5. using System.Threading.Tasks;
  6. public class RequestCountMiddleware
  7. {
  8.     private readonly RequestDelegate _next;
  9.     private readonly IMemoryCache _memoryCache;
  10.     public RequestCountMiddleware(RequestDelegate next, IMemoryCache memoryCache)
  11.     {
  12.         _next = next ?? throw new ArgumentNullException(nameof(next));
  13.         _memoryCache = memoryCache ?? throw new ArgumentNullException(nameof(memoryCache));
  14.     }
  15.     public async Task InvokeAsync(HttpContext context)
  16.     {
  17.         // 获取当前时间的分钟部分,以便将请求计数与时间关联
  18.         var currentMinute = DateTime.UtcNow.ToString("yyyyMMddHHmm");
  19.         // 从缓存中获取当前分钟的请求计数,如果不存在则初始化为0
  20.         var requestCount = _memoryCache.GetOrCreate(currentMinute, entry =>
  21.         {
  22.             entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5);
  23.             return 0;
  24.         });
  25.         // 增加请求计数
  26.         requestCount++;
  27.         // 更新缓存中的请求计数
  28.         _memoryCache.Set(currentMinute, requestCount);
  29.         // 执行下一个中间件
  30.         await _next(context);
  31.     }
  32. }
复制代码

  • 在Startup.cs中注册中间件:
在ConfigureServices方法中注册MemoryCache服务,并在Configure方法中使用UseMiddleware添加RequestCountMiddleware。
  1. using Microsoft.Extensions.DependencyInjection;
  2. public class Startup
  3. {
  4.     public void ConfigureServices(IServiceCollection services)
  5.     {
  6.         // 注册MemoryCache服务
  7.         services.AddMemoryCache();
  8.     }
  9.     public void Configure(IApplicationBuilder app)
  10.     {
  11.         // 添加RequestCountMiddleware到中间件管道
  12.         app.UseMiddleware<RequestCountMiddleware>();
  13.         // 其他中间件...
  14.     }
  15. }
复制代码

  • 使用中间件:
现在,RequestCountMiddleware将在每个请求中记录最近5分钟的请求次数。 测试代码
  1.     [ApiController]
  2.     [Route("[controller]")]
  3.     public class TestController : ControllerBase
  4.     {
  5.         private readonly IMemoryCache _memoryCache;
  6.         public TestController(IMemoryCache memoryCache)
  7.         {
  8.             _memoryCache = memoryCache;
  9.         }
  10.         public IActionResult Index()
  11.         {
  12.             var currentMinute = DateTime.UtcNow.ToString("yyyyMMddHHmm");
  13.             // 从缓存中获取当前分钟的请求计数,如果不存在则初始化为0
  14.             var requestCount = _memoryCache.Get<int>(currentMinute);
  15.             return Ok($"5分钟内访问次数:{requestCount}次");
  16.         }
  17.     }
复制代码
运行效果:
 
请注意,这个示例使用MemoryCache来存储请求计数,这意味着计数将在应用程序重新启动时重置。如果需要持久性,可以考虑使用其他存储方式,如数据库。
源代码获取:
https://pan.baidu.com/s/1To2txIo9VDH2myyM4ecRhg?pwd=6666
 



来源:https://www.cnblogs.com/hanbing81868164/p/18055693
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具