From 1d90aba7cd5de28ea27e8c1b72f874f64ae8a7dd Mon Sep 17 00:00:00 2001
From: he <109787524@qq.com>
Date: Tue, 30 Jun 2026 14:04:11 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=87=8D=E5=A4=8D=E8=AF=B7?=
=?UTF-8?q?=E6=B1=82=E9=80=9A=E7=9F=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../RequestDuplicationFilter.cs | 44 ++++++++++++++++++-
1 file changed, 43 insertions(+), 1 deletion(-)
diff --git a/IRaCIS.Core.Application/BusinessFilter/LegacyController/RequestDuplicationFilter.cs b/IRaCIS.Core.Application/BusinessFilter/LegacyController/RequestDuplicationFilter.cs
index a64d098bd..d462948dd 100644
--- a/IRaCIS.Core.Application/BusinessFilter/LegacyController/RequestDuplicationFilter.cs
+++ b/IRaCIS.Core.Application/BusinessFilter/LegacyController/RequestDuplicationFilter.cs
@@ -8,6 +8,7 @@ namespace IRaCIS.Core.Application.BusinessFilter.LegacyController
{
using Database.Api;
using DocumentFormat.OpenXml.InkML;
+ using IRaCIS.Core.Application.Helper.OtherTool;
using IRaCIS.Core.Application.Service.Common;
using IRaCIS.Core.Infrastructure;
using IRaCIS.Core.Infrastructure.Extention;
@@ -17,6 +18,7 @@ namespace IRaCIS.Core.Application.BusinessFilter.LegacyController
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.ModelBinding;
+ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
@@ -35,7 +37,7 @@ namespace IRaCIS.Core.Application.BusinessFilter.LegacyController
///
/// logger
/// loggerHelper
- public class RequestDuplicationFilter(ILogger logger, IHttpContextAccessor accessor, IUserInfo _userInfo, IStringLocalizer _localizer, IOptionsMonitor RequestDuplicationOptionsMonitor) : ExceptionFilterAttribute, IAsyncActionFilter
+ public class RequestDuplicationFilter(ILogger logger, IHttpContextAccessor accessor, IUserInfo _userInfo, IStringLocalizer _localizer, IOptionsMonitor RequestDuplicationOptionsMonitor, IConfiguration _config) : ExceptionFilterAttribute, IAsyncActionFilter
{
///
/// 传入的参数
@@ -118,11 +120,51 @@ namespace IRaCIS.Core.Application.BusinessFilter.LegacyController
RequestDuplicationOptionsMonitor.CurrentValue.DuplicationWindowMs);
if (!isAdded)
{
+ SendRequestDuplicationWeComNotice(requestPath);
+ logger.LogError($"重复请求出现错误:{this.Intoparam}");
throw new BusinessValidationFailedException(_localizer["RequestDuplicationFilter_RequestDuplication"], ApiResponseCodeEnum.BusinessValidationFailed);
}
}
}
+ private void SendRequestDuplicationWeComNotice(string requestPath)
+ {
+ try
+ {
+ bool isOpenWeComNotice = _config.GetValue("WeComNoticeConfig:IsOpenWeComNotice");
+
+ if (isOpenWeComNotice)
+ {
+ string webhook = _config["WeComNoticeConfig:WebhookUrl"] ?? string.Empty;
+
+ var uri = new Uri(_config["SystemEmailSendConfig:SiteUrl"]);
+ var baseUrl = uri.GetLeftPart(UriPartial.Authority);
+
+ var userList = _config.GetSection("WeComNoticeConfig:APINoticeUserList").Get();
+
+ var request = accessor?.HttpContext?.Request;
+
+ _ = WeComNotifier.SendAlertAsync(
+ webhook: webhook,
+ alert: new WeComAlert
+ {
+ Env = baseUrl,
+ UserName = _userInfo.UserName.IsNotNullOrEmpty() ? $"{_userInfo.UserName}({_userInfo.UserTypeShortName})" : "匿名",
+ Api = $"{request?.Method} {requestPath}",
+ Message = "重复请求拦截",
+ JsonData = this.Intoparam,
+ Stack = string.Empty,
+ AtUsers = userList ?? []
+ }
+ );
+ }
+ }
+ catch (Exception ex)
+ {
+ logger.LogError($"重复请求过滤器里发送企业微信出现错误:{ex.Message}");
+ }
+ }
+
public string GenerateParameterHash(string parameters)
{
if (string.IsNullOrEmpty(parameters))