|  |  |  | 
|---|
|  |  |  | using Microsoft.Extensions.DependencyModel; | 
|---|
|  |  |  | using Microsoft.IdentityModel.Tokens; | 
|---|
|  |  |  | using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; | 
|---|
|  |  |  | using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; | 
|---|
|  |  |  | using SqlSugar; | 
|---|
|  |  |  | using System; | 
|---|
|  |  |  | using System.Collections; | 
|---|
|  |  |  | using System.Collections.Generic; | 
|---|
|  |  |  | using System.Linq; | 
|---|
|  |  |  | using System.Reflection; | 
|---|
|  |  |  | 
|---|
|  |  |  | return SimpleValidate(propertyInfos, data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static (bool, string, object?) ValidateModelData(object data, Type type) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (data == null) return (false, "ä¼ å
¥åæ°ä¸å¯ä¸ºnull", data); | 
|---|
|  |  |  | ModelValidateAttribute? modelAttribute = type.GetCustomAttribute<ModelValidateAttribute>(); | 
|---|
|  |  |  | if (modelAttribute == null) return (false, $"{type.Name}æªå®ä¹ãModelValidateAttributeãç¹æ§", data); | 
|---|
|  |  |  | PropertyInfo[] propertyInfos = type.GetProperties(); | 
|---|
|  |  |  | return SimpleValidate(propertyInfos, data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /// <summary> | 
|---|
|  |  |  | /// éªè¯å®ä½åæ° | 
|---|
|  |  |  | /// </summary> | 
|---|
|  |  |  | 
|---|
|  |  |  | return (true, $"æå", datas); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //private static (bool, string, object?) CustomMethodValidate<T>(ModelValidateAttribute modelAttribute, T data) where T : class, new() | 
|---|
|  |  |  | //{ | 
|---|
|  |  |  | //    try | 
|---|
|  |  |  | //    { | 
|---|
|  |  |  | //        if (modelAttribute.CustomValidateMethodTypeName == null) return (false, $"èªå®ä¹éªè¯æ¹æ³éè¦æä¾æ¹æ³æå¨ç±»çç±»å对象", data); | 
|---|
|  |  |  | //        if (modelAttribute.CustomValidateMethodName == null) return (false, $"èªå®ä¹éªè¯æ¹æ³éè¦æä¾æ¹æ³å", data); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        string path = Path.Combine(AppContext.BaseDirectory, $"{modelAttribute.CustomValidateAssemblyName}.dll"); | 
|---|
|  |  |  | //        Assembly assembly = Assembly.LoadFrom(path); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //        Type t = assembly.GetType(modelAttribute.CustomValidateAssemblyName + "." + modelAttribute.CustomValidateMethodTypeName); | 
|---|
|  |  |  | //        object bbb = App.GetService(t); | 
|---|
|  |  |  | //        MethodInfo? methodInfo = t.GetMethod(modelAttribute.CustomValidateMethodName); | 
|---|
|  |  |  | //        var result = methodInfo.Invoke(bbb, new object[] { data }); | 
|---|
|  |  |  | //        //MethodInfo? methodInfo = modelAttribute.CustomValidateMethodType.GetMethod(modelAttribute.CustomValidateMethodName); | 
|---|
|  |  |  | //        //if (methodInfo == null) return (false, $"æªå¨è¯¥ç±»å对象ã{modelAttribute.CustomValidateMethodType.Name}ã䏿¾å°è¯¥æ¹æ³ã{modelAttribute.CustomValidateMethodName}ã", data); | 
|---|
|  |  |  | //        //methodInfo.GetGenericArguments() | 
|---|
|  |  |  | //        return (true, "æå", data); | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  | //    catch(Exception ex) | 
|---|
|  |  |  | //    { | 
|---|
|  |  |  | //        throw new Exception(); | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //} | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private static (bool, string, object?) SimpleValidate<T>(PropertyInfo[] propertyInfos, T data) where T : class, new() | 
|---|
|  |  |  | { | 
|---|
|  |  |  | try | 
|---|
|  |  |  | 
|---|
|  |  |  | if (propertyAttribute == null) continue; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | object? value = propertyInfo.GetValue(data, null); | 
|---|
|  |  |  | if (value is IList) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | IList list = (IList)value; | 
|---|
|  |  |  | Type? t = list.GetType().GetGenericArguments().FirstOrDefault(); | 
|---|
|  |  |  | if (t != null && t.IsClass) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | foreach (var item in list) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | (bool, string, object?) result = ValidateModelData(item, t); | 
|---|
|  |  |  | if (!result.Item1) return result; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (propertyAttribute.NotNullAndEmpty) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}ä¸å¯ä¸ºnull", data); | 
|---|
|  |  |  | if (string.IsNullOrEmpty(value.ToString())) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}ä¸å¯ä¸ºç©ºå符串", data); | 
|---|
|  |  |  | if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})ä¸å¯ä¸ºnull", data); | 
|---|
|  |  |  | if (string.IsNullOrEmpty(value.ToString())) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})ä¸å¯ä¸ºç©ºå符串", data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (propertyAttribute.MinValue > int.MinValue) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}ä¸å¯ä¸ºnull", data); | 
|---|
|  |  |  | if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})ä¸å¯ä¸ºnull", data); | 
|---|
|  |  |  | if (propertyAttribute.IsContainMinValue) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (Convert.ToInt32(value.ToString()) < propertyAttribute.MinValue) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}çå¼ã{value}ãä¸å¯å°äºã{propertyAttribute.MinValue}ã", data); | 
|---|
|  |  |  | if (Convert.ToInt32(value.ToString()) < propertyAttribute.MinValue) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})çå¼ã{value}ãä¸å¯å°äºã{propertyAttribute.MinValue}ã", data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (Convert.ToInt32(value.ToString()) <= propertyAttribute.MinValue) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}çå¼ã{value}ãè¦å¤§äºã{propertyAttribute.MinValue}ã", data); | 
|---|
|  |  |  | if (Convert.ToInt32(value.ToString()) <= propertyAttribute.MinValue) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})çå¼ã{value}ãè¦å¤§äºã{propertyAttribute.MinValue}ã", data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (propertyAttribute.MaxValue < int.MaxValue) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}ä¸å¯ä¸ºnull", data); | 
|---|
|  |  |  | if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})ä¸å¯ä¸ºnull", data); | 
|---|
|  |  |  | if (propertyAttribute.IsContainMaxValue) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (Convert.ToInt32(value.ToString()) >= propertyAttribute.MaxValue) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}çå¼ã{value}ãä¸å¯å¤§äºã{propertyAttribute.MaxValue}ã", data); | 
|---|
|  |  |  | if (Convert.ToInt32(value.ToString()) >= propertyAttribute.MaxValue) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})çå¼ã{value}ãä¸å¯å¤§äºã{propertyAttribute.MaxValue}ã", data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (Convert.ToInt32(value.ToString()) > propertyAttribute.MaxValue) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}çå¼ã{value}ãè¦å°äºã{propertyAttribute.MaxValue}ã", data); | 
|---|
|  |  |  | if (Convert.ToInt32(value.ToString()) > propertyAttribute.MaxValue) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})çå¼ã{value}ãè¦å°äºã{propertyAttribute.MaxValue}ã", data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | if (tempValue.ChangeType(property.PropertyType).ToString() == propertyAttribute.NotNullAndEmptyWithPropertyAndValue[1].ChangeType(property.PropertyType).ToString()) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | string str = value.Serialize(); | 
|---|
|  |  |  | if (str == "[]") | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (typeof(IList).IsAssignableFrom(property.PropertyType) && str == "[]") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return (false, $"ã{property.Name}ã屿§çå¼ä¸ºã{propertyAttribute.NotNullAndEmptyWithPropertyAndValue[1]}ãæ¶ã{propertyInfo.Name}ã屿§çå¼ä¸å¯ä¸ºç©º", data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (property.PropertyType.IsArray && str == "[]") | 
|---|
|  |  |  | { | 
|---|
|  |  |  | return (false, $"ã{property.Name}ã屿§çå¼ä¸ºã{propertyAttribute.NotNullAndEmptyWithPropertyAndValue[1]}ãæ¶ã{propertyInfo.Name}ã屿§çå¼ä¸å¯ä¸ºç©º", data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else if (types.Length == 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | return (false, $"ã{property.Name}ã屿§çå¼ä¸ºã{propertyAttribute.NotNullAndEmptyWithPropertyAndValue[1]}ãæ¶ã{propertyInfo.Name}ã屿§çå¼ä¸å¯ä¸ºç©º", data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | 
|---|
|  |  |  | return (false, $"æªæ¾å°å±æ§ã{propertyAttribute.NotNullAndEmptyWithProperty}ã", data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (propertyAttribute.Check != null && propertyAttribute.Check.Length > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})ä¸å¯ä¸ºnull", data); | 
|---|
|  |  |  | if (propertyAttribute.Check.FirstOrDefault(x => x.ToString() == value.ToString()) == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})使ç¨äºCheck约æï¼ä¼ å
¥çå¼ä¸å¨{propertyAttribute.Check.Serialize()}ä¸", data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!string.IsNullOrEmpty(propertyAttribute.StartWith) && !string.IsNullOrWhiteSpace(propertyAttribute.EndWith)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})ä¸å¯ä¸ºnull", data); | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (value.ToString().StartsWith(propertyAttribute.StartWith.Trim())) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})å¿
须以{propertyAttribute.StartWith}å¼å¤´", data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!string.IsNullOrEmpty(propertyAttribute.EndWith) && !string.IsNullOrWhiteSpace(propertyAttribute.EndWith)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})ä¸å¯ä¸ºnull", data); | 
|---|
|  |  |  | else | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (value.ToString().EndsWith(propertyAttribute.EndWith.Trim())) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}({propertyInfo.Name})å¿
须以{propertyAttribute.EndWith}ç»å°¾", data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (propertyAttribute.MaxLength > propertyAttribute.MinLength && propertyAttribute.MinLength > 0) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (value == null) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}ä¸å¯ä¸ºnull", data); | 
|---|
|  |  |  | if (value.ToString().Length > propertyAttribute.MaxLength) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}çå¼è¶
åºæå¤§é¿åº¦ã{propertyAttribute.MaxLength}ãï¼æ°æ®:{value}", data); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (value.ToString().Length < propertyAttribute.MinLength) return (false, $"{(string.IsNullOrEmpty(propertyAttribute.Description) ? propertyInfo.Name : propertyAttribute.Description)}çå¼å°äºæå°é¿åº¦ã{propertyAttribute.MinLength}ãï¼æ°æ®:{value}", data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | catch (Exception ex) | 
|---|