当前位置: 首页 > news >正文

学生个人网站制作软件找建设网站公司吗

学生个人网站制作软件,找建设网站公司吗,网站域名年费多少钱,气象网站建设的自查报告文章目录 前言一、实现步骤1)创建自定义Action Filter示例1:示例2: 2)注册服务3)使用 二、实现说明总结 前言 以下是一个基于内存缓存实现的自定义限流Action Filter。 一、实现步骤 1)创建自定义Action…

文章目录

  • 前言
  • 一、实现步骤
    • 1)创建自定义Action Filter
      • 示例1:
      • 示例2:
    • 2)注册服务
    • 3)使用
  • 二、实现说明
  • 总结


前言

以下是一个基于内存缓存实现的自定义限流Action Filter。

一、实现步骤

1)创建自定义Action Filter

示例1:

  1. MyRateLimitAttribute.cs
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Mvc.Filters;
    using Microsoft.Extensions.Caching.Memory;public class MyRateLimitAttribute : TypeFilterAttribute{public MyRateLimitAttribute() :base(typeof(MyRateLimitFilter)){}public class MyRateLimitFilter : IAsyncActionFilter{private readonly IMemoryCache _memoryCache;public MyRateLimitFilter(IMemoryCache memoryCache){_memoryCache = memoryCache;}public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next){string ip = context.HttpContext.Connection.RemoteIpAddress.ToString();if (string.IsNullOrEmpty(ip)){context.Result = new BadRequestObjectResult("Invalid Client IP");return;}string cacheKey = $"MyRateLimit_{ip}";_memoryCache.TryGetValue<long?>(cacheKey, out long? lastVisit);if (lastVisit == null || Environment.TickCount64 - lastVisit > 1000){_memoryCache.Set(cacheKey, Environment.TickCount64, TimeSpan.FromSeconds(10));await next();}else{context.Result = new ObjectResult("访问太频繁") { StatusCode=429};                    }}}}
    

示例2:

  1. RateLimitAttribute.cs
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Mvc.Filters;
    using Microsoft.Extensions.Caching.Memory;public class RateLimitAttribute : TypeFilterAttribute
    {public RateLimitAttribute(int maxRequests,int secondsWindow) : base(typeof(RateLimitFilter)){Arguments = new object[] { maxRequests,secondsWindow};}public class RateLimitFilter : IAsyncActionFilter{private readonly IMemoryCache _memoryCache;private readonly int _maxRequests;private readonly int _secondsWindow;public RateLimitFilter(IMemoryCache memoryCache, int maxRequests, int secondsWindow){_memoryCache = memoryCache;_maxRequests = maxRequests;_secondsWindow = secondsWindow;}public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next){var ip=context.HttpContext.Connection.RemoteIpAddress?.ToString();if (string.IsNullOrEmpty(ip)){context.Result = new BadRequestObjectResult("Invalid client IP");return;}var cacheKey = $"RateLimit_{ip}";var windowStart = DateTime.UtcNow.AddSeconds(-DateTime.UtcNow.Second % _secondsWindow);if (!_memoryCache.TryGetValue(cacheKey, out RateLimitCounter counter) ||windowStart > counter.WindowStart){counter = new RateLimitCounter{Count = 1,WindowStart = windowStart,};}else{counter.Count++;}if (counter.Count > _maxRequests){context.Result = new ObjectResult("Too many requests"){StatusCode = 429};return;}_memoryCache.Set(cacheKey, counter, counter.WindowStart.AddSeconds(_secondsWindow));await next();}private class RateLimitCounter{public int Count { get; set; }public DateTime WindowStart { get; set; }}}
    }
    

2)注册服务

  1. 内存缓存服务
    builder.Services.AddMemoryCache();
    

3)使用

  1. 示例:
    [HttpGet]
    //[RateLimit(maxRequests: 5, secondsWindow: 60)] // 每分钟最多5次请求
    [MyRateLimit]
    public async Task<ActionResult<Book>> GetAllBookAsync()
    {var res=await _bookRepository.GetAllAsync();return Ok(res);
    }
    

二、实现说明

  1. 使用IP地址识别客户端(需考虑代理场景)
  2. 基于固定时间窗口算法(每分钟/小时重置计数器)(示例2)
  3. 使用IMemoryCache存储计数器
  4. 返回429状态码(Too Many Requests)时阻止请求

总结

  1. 内存缓存方案仅适用于单实例部署
  2. 高并发场景建议使用Interlocked类处理计数器原子操作
  3. 生产环境推荐使用分布式缓存(如Redis
  4. 建议使用成熟的限流库(如AspNetCoreRateLimit
http://www.dtcms.com/a/400979.html

相关文章:

  • 在网站上如何做天气预报栏中山网站建设哪家便宜
  • 一个网站如何做桌面快捷链接html静态网站下载
  • 成都网站网站建设网站推广优化排名seo
  • 要怎么做网站动图学生网站作品
  • 张家港外贸网站建设百度不收录网站
  • 尚云网站建设做的好点的外贸网站有哪些
  • 电脑上wap网站策划书模板范文
  • 网站页面设计多少钱深圳上市公司网站建设公司
  • 二次元网站开发的意义网易企业邮箱官网登录
  • 城市中国商业网站平台口碑好的免费网站建设
  • 企业建设企业网站的好处网站域名费用怎么做帐
  • 淘宝网站建设单子好接吗优化设计五年级上册语文答案
  • 网站建设解决方案服务商wordpress 图片相册
  • 怎样查看网站点击量搜索引擎网址有哪些
  • 淘宝联盟返利网站怎么做三门峡集团网站建设
  • 网站在建设中模板下载科技素材
  • 企业展示型网站建设方案在线网页设计器
  • 网站开发博客关系的网站
  • 外贸网站建设十大标准外贸网站建站小刘网站建设
  • 好习惯网站做恐怖网站
  • 网站建设合同封皮如何申请域名和ip地址
  • 免费零食网站模板山东网站建设运行工资
  • 汕头网站制作公司广东建设中标网站
  • 万网发布网站纯静态企业网站
  • 综合服务平台一站式服务平台网站开发紫金网站制作
  • 广告网站定制打开百度网址
  • 青岛网站建设运营Wordpress使用ldap
  • 无需代码!用 Amazon Glue 实现 PostgreSQL 数据复制与 PII 脱敏
  • 浅析网站域名在搜索引擎排名中的作用wordpress 图片外链
  • 建设部网站首页督办案件菜鸟网站做图