• asp.net core 限流filter


    限流过滤器

        public class RateLimitActionFilter : IAsyncActionFilter
        {
            private IMemoryCache MemoryCache { get; init; }
    
            public RateLimitActionFilter(IMemoryCache memoryCache)
            {
                MemoryCache = memoryCache;
            }
    
            async Task IAsyncActionFilter.OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
            {
                IPAddress? addr = context.HttpContext.Connection.RemoteIpAddress;
                string ip = context.HttpContext.Connection.Id;
    
                if (addr != null)
                    ip = addr.ToString();
    
                string key = $"visit_{ip}";
                long? lastVisit = MemoryCache.Get<long?>(key);
    
                if (lastVisit == null || Environment.TickCount64 - lastVisit > 1000)
                {
                    MemoryCache.Set(key, Environment.TickCount64, TimeSpan.FromSeconds(10));
                    await next();
                }
                else
                {
                    context.Result = new ObjectResult("too much access") { StatusCode = 429 };
                }
            }
        }
    

    注入asp.net core

    builder.Services.AddMemoryCache();
    
    builder.Services.Configure<MvcOptions>(opt =>
    {
        opt.Filters.Add<RateLimitActionFilter>();    
        opt.Filters.Add<MyExceptionFilter>();
        opt.Filters.Add<MyActionFilter>();
        opt.Filters.Add<TransactionScopeFilter>();
    });
    
  • 相关阅读:
    vue移动端适配
    vue根据状态改变文字颜色
    vue使用富文本插件
    小程序echart使用
    小程序日历状态圆点
    echars属性详解
    小程序vant文档地址
    vue根据不同文字切换显示不同颜色
    小程序获取用户手机号码
    小程序图片上传
  • 原文地址:https://www.cnblogs.com/mryux/p/15890108.html
Copyright © 2020-2023  润新知