Sfoglia il codice sorgente

!1642 feat: 添加Enum特性以验证枚举值的合规性,相比Dict特性大幅提高枚举类型验证效率;更新相关DTO属性
Merge pull request !1642 from ir0nmax/next

zuohuaijun 1 anno fa
parent
commit
585ba1a9bb

+ 50 - 0
Admin.NET/Admin.NET.Core/Attribute/EnumAttribute.cs

@@ -0,0 +1,50 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Core;
+
+/// <summary>
+/// 枚举值合规性校验特性
+/// </summary>
+[SuppressSniffer]
+[AttributeUsage( AttributeTargets.Property | AttributeTargets.Enum | AttributeTargets.Field, AllowMultiple = true)]
+public class EnumAttribute : ValidationAttribute, ITransient
+{
+    /// <summary>
+    /// 枚举值合规性校验特性
+    /// </summary>
+    /// <param name="errorMessage"></param>
+    public EnumAttribute(string errorMessage = "枚举值不合法!")
+    {
+        ErrorMessage = errorMessage;
+    }
+
+    /// <summary>
+    /// 枚举值合规性校验
+    /// </summary>
+    /// <param name="value"></param>
+    /// <param name="validationContext"></param>
+    /// <returns></returns>
+    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
+    {
+        // 获取属性的类型
+        var property = validationContext.ObjectType.GetProperty(validationContext.MemberName);
+        if (property == null)
+            return new ValidationResult($"未知属性: {validationContext.MemberName}");
+
+        var propertyType = property.PropertyType;
+
+        // 检查属性类型是否为枚举
+        if (!propertyType.IsEnum)
+            return new ValidationResult($"属性类型'{validationContext.MemberName}'不是有效的枚举类型!");
+
+        // 检查枚举值是否有效
+        if (!Enum.IsDefined(propertyType, value))
+            return new ValidationResult($"提示:{ErrorMessage}|枚举值【{value}】不是有效的【{propertyType.Name}】枚举类型值!");
+
+        return ValidationResult.Success;
+    }
+}

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Template/Dto/SysTemplateInput.cs

@@ -48,7 +48,7 @@ public class AddTemplateInput : SysTemplate
     /// <summary>
     /// <summary>
     /// 模板类型
     /// 模板类型
     /// </summary>
     /// </summary>
-    [Dict(nameof(TemplateTypeEnum))]
+    [Enum]
     public override TemplateTypeEnum Type { get; set; }
     public override TemplateTypeEnum Type { get; set; }
 
 
     /// <summary>
     /// <summary>

+ 1 - 2
Admin.NET/Admin.NET.Core/Service/User/Dto/UserRegWayInput.cs

@@ -37,8 +37,7 @@ public class AddUserRegWayInput : SysUserRegWay
     /// <summary>
     /// <summary>
     /// 账号类型
     /// 账号类型
     /// </summary>
     /// </summary>
-    [Dict(nameof(AccountTypeEnum), AllowNullValue = true)]
-    [Required(ErrorMessage = "账号类型不能为空")]
+    [Enum(ErrorMessage = "账号类型不正确")]
     public override AccountTypeEnum AccountType { get; set; }
     public override AccountTypeEnum AccountType { get; set; }
 
 
     /// <summary>
     /// <summary>

+ 1 - 1
Admin.NET/Admin.NET.Core/Utils/BaseStatusInput.cs

@@ -14,6 +14,6 @@ public class BaseStatusInput : BaseIdInput
     /// <summary>
     /// <summary>
     /// 状态
     /// 状态
     /// </summary>
     /// </summary>
-    [Dict(nameof(StatusEnum))]
+    [Enum]
     public StatusEnum Status { get; set; }
     public StatusEnum Status { get; set; }
 }
 }