.net 6 基于AspNetCoreRateLimit的限流

2023-05-16

1-安装包 AspNetCoreRateLimit
在这里插入图片描述
2-在appsetting.cs中加入IpRateLimiting配置节点
在这里插入图片描述


  //限流配置
  "IpRateLimiting": {
    //false,则全局将应用限制,并且仅应用具有作为端点的规则*。例如,如果您设置每秒5次调用的限制,则对任何端点的任何HTTP调用都将计入该限制
    //true, 则限制将应用于每个端点,如{HTTP_Verb}{PATH}。例如,如果您为*:/api/values客户端设置每秒5个呼叫的限制,
    "EnableEndpointRateLimiting": true,
    //false,拒绝的API调用不会添加到调用次数计数器上;如 客户端每秒发出3个请求并且您设置了每秒一个调用的限制,则每分钟或每天计数器等其他限制将仅记录第一个调用,即成功的API调用。
    //如果您希望被拒绝的API调用计入其他时间的显示(分钟,小时等),则必须设置StackBlockedRequests为true。
    "StackBlockedRequests": false,
    //Kestrel 服务器背后是一个反向代理,如果你的代理服务器使用不同的页眉然后提取客户端IP X-Real-IP使用此选项来设置
    "RealIpHeader": "X-Real-IP",
    取白名单的客户端ID。如果此标头中存在客户端ID并且与ClientWhitelist中指定的值匹配,则不应用速率限制。
    //"ClientIdHeader": "X-ClientId",
    //限制状态码,设置QuotaExceededResponse后会被覆盖
    //"HttpStatusCode": 429,
    IP白名单:支持Ip v4和v6 
    //"IpWhitelist": [ "127.0.0.1", "::1/10", "192.168.0.0/24" ],
    //不限流白名单
    "EndpointWhitelist": [
      "*:/Api/Test/Test/NotLimit"
    ],
    客户端白名单
    //"ClientWhitelist": [ "dev-id-1", "dev-id-2" ],
    //拦截时返回参数
    "QuotaExceededResponse": {
      //返回内容
      "Content": "{{ \"success\": false, \"resultCode\": 105, \"resultDesc\": \"频繁请求,请稍后在试\"}}",
      //格式
      "ContentType": "application/json",
      //状态码
      "StatusCode": "200"
    },
    //拦截配置
    "GeneralRules": [
      {
        //拦截的接口
        "Endpoint": "*",
        //单位时间
        "Period": "1s",
        //最多访问次数
        "Limit": 3
      }
    ]
  }

3-Program.cs中添加限流服务策略
在这里插入图片描述

//配置限流策略
builder.BaseInit().Services.AddOptions().AddMemoryCache()
    .Configure<IpRateLimitOptions>(builder.Configuration.GetSection("IpRateLimiting"))
    .AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>()
    .AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>()
    .AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>()
    .AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();

4-启用限流中间件(尽量放在中间件请求管道前面)
在这里插入图片描述
完事!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.net 6 基于AspNetCoreRateLimit的限流 的相关文章

  • 使用 LINQ to SQL 时避免连接超时的最佳实践

    我需要知道在 net 应用程序中使用 LINQ to SQL 时避免连接超时的最佳实践 特别是在返回时IQueryable
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 我的 .NET 库列表中缺少 System.Windows.Data

    您好 我想使用 System Windows Data IValueConverter 但是当我尝试在 VS2010 中添加对 System Windows Data 的引用时 我只看到 System Windows Forms 和 Sys
  • MongoDb 注册类映射

    我有以下代码 我希望 MiscellaneousData 覆盖抽象的 MiscellaneousDataBase 然而 IdMemberMap 总是出现空值 使用独立的 正常 类是可行的 if BsonClassMap IsClassMap
  • 如何捕获一个 int

    我正在使用 IL 抛出一个 Int32 并捕获它 这只是出于好奇 我并没有试图实现任何目标 所以请不要告诉我抛出异常而不是 int method private hidebysig static void Main string args
  • 如何使用 .NET 以编程方式沙箱进程

    我计划设计一个系统 本质上允许用户在我的机器上运行 PHP Ruby 等脚本代码 我想将它们放入沙箱中 以防止它们访问机器的关键方面 哪些 NET API 可用于此目的 我计划从主流程创建一个子流程 并希望以编程方式从主流程中沙箱该子流程
  • WPF 如何从 DataTemplate 访问控件

    我有一个包含网格的数据模板 网格内有一个组合框
  • ASP.net 出现错误“访问路径被拒绝”。尝试将文件上传到我的 Windows Server 2008 R2 Web 服务器时

    我有一个 ASP NET Web 应用程序 它将文件上传到 Web 服务器上的特定文件夹 本地一切工作正常 但是当我将应用程序部署到 Web 服务器时 我开始收到错误 访问路径 D Attachments myfile doc 被拒绝 我向
  • 如何判断应用程序是否是Web应用程序

    在 Windows 服务和 Web 应用程序中运行的核心程序集中 我需要存储每个用户会话的信息 该服务将具有单个用户会话 并且 Web 应用程序使用 HttpContext Current 我想配置在核心程序集中使用哪种方法 约定优于配置
  • 什么是扩展方法?

    NET 中的扩展方法是什么 编辑 我已在以下位置发布了后续问题扩展方法的使用 https stackoverflow com questions 403619 usage of extension methods 扩展方法允许开发者向公众添
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 将日期时间转换为时间

    我有一个对象 2 17 2011 6 46 01 PM 我想将此对象转换为 6 46 PM string myDateString 2 17 2011 6 46 01 PM DateTime datetime DateTime Parse
  • 防止字符串中出现西里尔文/希腊文/中文 - C# 4.0

    我们有一个支持希腊语 西里尔语 中文字符的系统 使用 ASP NET C 4 0 但第三方系统似乎无法正常工作 为了避免为此第三方系统输入数据时出现问题 我想将文本字段限制为仅接受英语或重音字符 但返回其他字符的验证错误 我怎样才能做到这一
  • 在 C# 中在 Windows 标题栏区域中创建选项卡

    有人可以告诉我如何在 C Winforms 应用程序的标题栏区域中创建选项卡吗 我正在寻找类似于 Google Chrome 的外观 Chrome 中的每个选项卡都停靠在主应用程序窗口的标题栏中 尝试将表单的 FormBorderStyle
  • PhotoChooserTask 抛出未处理的异常

    我已经有了这段代码 我使用它来显示一个按钮 该按钮允许用户从他的库中选择图像并将其用作我的应用程序的背景 所以我创建了一个PhotoChooserTask 将其设置为显示相机并将其绑定到任务完成时必须执行的方法 该按钮将通过显示PhotoC
  • 如何对ArrayList(int)进行排序

    我怎样才能排序Arraylist按升序和降序排列 例子 ArrayList list new ArrayList list Add 2 list Add 8 list Add 0 list Add 1 如何按升序和降序对上面的列表进行排序
  • 如何将一个控件的属性绑定到另一个控件的属性?

    我希望当表单被禁用时 表单中的 保存 按钮消失 我这样做 this formStackPanel IsEnabled someValue if this formStackPanel IsEnabled this saveButton Vi
  • .NET 程序集差异/比较工具 - 有什么可用? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在两个程序集之间进行代码级差异 Reflector 的 Diff 插件是迄今为止我发现的最接
  • 如何使用 Roslyn 通过扩展方法、静态类中的方法以及带有 ref/out 参数的方法来访问调用

    我正在致力于创建一个开源项目 用于创建 NET UML 序列图 该项目利用名为 js sequence diagrams 的 javascript 库 我不确定 Roslyn 是适合这项工作的工具 但我想我应该尝试一下 所以我整理了一些概念

随机推荐