在我们的REST api服务器中,我们希望为性能不佳的客户端引入相同的速率限制。例如。客户端每秒发送多个请求,每秒钟每分钟都会产生状态代码为4xx的结果,相应的客户端将被阻止1分钟每小时每分钟。
稍作搜索后,我发现了一些类似AspNetCoreRateLimit的项目,但是它们似乎都只计入传入请求,并且在稍微阅读了代码之后,这里是实现的 heart 计算请求:
public class IpRateLimitMiddleware
{
// ... some private fields and a ctor that takes some dependencies
public async Task Invoke(HttpContext httpContext)
{
// ... some extraction of values like remote ip, route, etc.
// ... some checks if any defined rule matches
// ... if rule found, check counter
if(counter >= rule.counter)
{
await httpContext.Response.WriteAsync(blockedMessage);
return;
}
await _next.Invoke(httpContext);
}
}
但是所有这些规则仅会在处理之前影响传入的请求。但我想在处理结果后 检查结果以增加计数器。他们那里有什么东西已经解决了这种情况吗?如果没有,我如何知道中间件中的结果状态代码以增加规则计数器?
答案 0 :(得分:2)
如果要在以后进行评估,请更改中间件代码,以在对_next
的调用后 运行。