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))