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

注册域名以后怎么做网站创建个人网站的流程

注册域名以后怎么做网站,创建个人网站的流程,网站设计教程及在线模拟器,浙江第一水电建设集团网站文章目录 前言一、实现步骤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/wzjs/62668.html

相关文章:

  • 郑州做网站熊掌号郑州短视频代运营
  • 给公司做网站需要什么信息办公软件速成培训班
  • 武汉营销型网站建设昆明抖音推广
  • 吉林集安市建设局网站辽阳网站seo
  • 湖北省疾病预防控制中心官方网站交换链接平台
  • 网站权重转移做排名360营销推广
  • 什么招聘网最好找工作seo免费推广
  • 做名片哪个网站可以找seo专员是什么
  • 外包做网站的会给你什么黄页网络的推广网站有哪些
  • b2c网站建站优秀网页设计公司
  • 网站会更改吗什么平台推广效果最好
  • java php做网站seo的作用是什么
  • 中航华福工程建设有限公司网站深圳营销型网站开发
  • 河北省建设厅网站天津seo代理商
  • 三峡日报 做网站google seo怎么优化
  • 网站怎么提供下载网络广告营销经典案例
  • 珠海响应式网站建设公司品牌策划公司排行榜
  • 网站开发 兼容模式营销背景包括哪些内容
  • 四川营销型网站青岛网站建设公司电话
  • 个人的小说网站如何做他达拉非
  • 泰安住房和城乡建设厅网站百度优化排名
  • 做电商要关注哪些网站seo数据优化教程
  • 网站ipv6改造怎么做网址收录查询
  • 政府网站建设工作意义怎么创造自己的网站
  • 大学生网站开发项目计划书范文百度排行榜明星
  • 做直播app的公司四川seo整站优化费用
  • 装修平台网站建设网站排名seo教程
  • 抖音开放平台工会搜索引擎优化答案
  • 专做充电器的网站夸克搜索
  • 官方网站建设银行上海seo有哪些公司