IP限流中间件


一、在Startup.cs文件中配置

public void ConfigureServices(IServiceCollection services)
{
    // needed to load configuration from appsettings.json
    services.AddOptions();
?
    // needed to store rate limit counters and ip rules
    services.AddMemoryCache();
?
    //load general configuration from appsettings.json
    services.Configure(Configuration.GetSection("IpRateLimiting"));
?
    //load ip rules from appsettings.json
    services.Configure(Configuration.GetSection("IpRateLimitPolicies"));
?
    // inject counter and rules stores
    services.AddInMemoryRateLimiting();
        //services.AddDistributedRateLimiting();
        //services.AddDistributedRateLimiting();
        //services.AddRedisRateLimiting();
?
    // Add framework services.
    //services.AddMvc();
?
        // configuration (resolvers, counter key builders)
        services.AddSingleton();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseIpRateLimiting();//写在路由下面
}

 

二、在appsettings.json文件中配置

"IpRateLimiting": {
    "EnableEndpointRateLimiting": false,
    "StackBlockedRequests": false,
    "RealIpHeader": "X-Real-IP",
    "ClientIdHeader": "X-ClientId",
    "HttpStatusCode": 429,
    //"IpWhitelist": [ "127.0.0.1", "::1/10", "192.168.0.0/24" ],
    //"EndpointWhitelist": [ "get:/api/license", "*:/api/status" ],
    //"ClientWhitelist": [ "dev-id-1", "dev-id-2" ],
    "GeneralRules": [
      {
        "Endpoint": "*",
        "Period": "10s",
        "Limit": 2,
        "QuotaExceededResponse": {
          "Content": "访问过于频繁,请稍后再试"
        }
      },
      {
        "Endpoint": "*",
        "Period": "15m",
        "Limit": 100
      },
      {
        "Endpoint": "*",
        "Period": "12h",
        "Limit": 1000
      },
      {
        "Endpoint": "*",
        "Period": "7d",
        "Limit": 10000
      }
    ]
  }

三、切换中文格式

  1. 用Notepad++软件打开appsettings.json文件

  2. 转为UTF-8编码