CommonUtils.Core/CoreHttpUtil.cs
(完整代码) 1KBusing Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.StaticFiles;
using System.Net;
namespace CommonUtils
{
public static class CoreHttpUtil
{
private static StringCountMap _ipCountMap = new StringCountMap();
static CoreHttpUtil()
{
ThreadUtil.LoopDelay(_ipCountMap.Clear, 3600);
}
public static bool CheckAttack(HttpRequest request)
{
var key = request.Host.Value;
_ipCountMap.Sum(key);
return _ipCountMap.Get(key) > 1000;
}
//StaticFileResponseContext
public static bool CheckAttack(StaticFileResponseContext context)
=> CheckAttack(context.Context.Request);
public static void Forbid(StaticFileResponseContext context)
{
var response = context.Context.Response;
response.StatusCode = HttpUtil.GetStatusCode(HttpStatusCode.Forbidden);
response.ContentLength = 0;
response.Body = BinaryUtil.EmptyStream;
}
public static void ForbidAttack(StaticFileResponseContext context)
{
if (CheckAttack(context.Context.Request))
Forbid(context);
}
//ResourceExecutedContext
public static bool CheckAttack(ResourceExecutedContext context)
=> CheckAttack(context.HttpContext.Request);
public static void Forbid(ResourceExecutedContext context)
=> context.Result = StaticActionResult.Forbid;
public static void ForbidAttack(ResourceExecutedContext context)
{
if (CheckAttack(context.HttpContext.Request))
Forbid(context);
}
}
}
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。