DataValidationExtensions.cs
5.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
using NCC.Dependency;
using NCC.FriendlyException;
using Microsoft.AspNetCore.Http;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text.RegularExpressions;
namespace NCC.DataValidation
{
/// <summary>
/// 数据验证拓展类
/// </summary>
[SuppressSniffer]
public static class DataValidationExtensions
{
/// <summary>
/// 拓展方法,验证类类型对象
/// </summary>
/// <param name="obj">对象实例</param>
/// <param name="validateAllProperties">是否验证所有属性</param>
/// <returns>验证结果</returns>
public static DataValidationResult TryValidate(this object obj, bool validateAllProperties = true)
{
return DataValidator.TryValidateObject(obj, validateAllProperties);
}
/// <summary>
/// 拓展方法,验证单个值
/// </summary>
/// <param name="value">单个值</param>
/// <param name="validationAttributes">验证特性</param>
/// <returns></returns>
public static DataValidationResult TryValidate(this object value, params ValidationAttribute[] validationAttributes)
{
return DataValidator.TryValidateValue(value, validationAttributes);
}
/// <summary>
/// 拓展方法,验证单个值
/// </summary>
/// <param name="value">单个值</param>
/// <param name="validationTypes">验证类型</param>
/// <returns></returns>
public static DataValidationResult TryValidate(this object value, params object[] validationTypes)
{
return DataValidator.TryValidateValue(value, validationTypes);
}
/// <summary>
/// 拓展方法,验证单个值
/// </summary>
/// <param name="value">单个值</param>
/// <param name="validationOptionss">验证逻辑</param>
/// <param name="validationTypes">验证类型</param>
/// <returns></returns>
public static DataValidationResult TryValidate(this object value, ValidationPattern validationOptionss, params object[] validationTypes)
{
return DataValidator.TryValidateValue(value, validationOptionss, validationTypes);
}
/// <summary>
/// 拓展方法,验证类类型对象
/// </summary>
/// <param name="obj">对象实例</param>
/// <param name="validateAllProperties">是否验证所有属性</param>
public static void Validate(this object obj, bool validateAllProperties = true)
{
DataValidator.TryValidateObject(obj, validateAllProperties).ThrowValidateFailedModel();
}
/// <summary>
/// 拓展方法,验证单个值
/// </summary>
/// <param name="value">单个值</param>
/// <param name="validationAttributes">验证特性</param>
public static void Validate(this object value, params ValidationAttribute[] validationAttributes)
{
DataValidator.TryValidateValue(value, validationAttributes).ThrowValidateFailedModel();
}
/// <summary>
/// 拓展方法,验证单个值
/// </summary>
/// <param name="value">单个值</param>
/// <param name="validationTypes">验证类型</param>
public static void Validate(this object value, params object[] validationTypes)
{
DataValidator.TryValidateValue(value, validationTypes).ThrowValidateFailedModel();
}
/// <summary>
/// 拓展方法,验证单个值
/// </summary>
/// <param name="value">单个值</param>
/// <param name="validationOptionss">验证逻辑</param>
/// <param name="validationTypes">验证类型</param>
public static void Validate(this object value, ValidationPattern validationOptionss, params object[] validationTypes)
{
DataValidator.TryValidateValue(value, validationOptionss, validationTypes).ThrowValidateFailedModel();
}
/// <summary>
/// 拓展方法,验证单个值
/// </summary>
/// <param name="value">单个值</param>
/// <param name="regexPattern">正则表达式</param>
/// <param name="regexOptions">正则表达式选项</param>
/// <returns></returns>
public static bool TryValidate(this object value, string regexPattern, RegexOptions regexOptions = RegexOptions.None)
{
return DataValidator.TryValidateValue(value, regexPattern, regexOptions);
}
/// <summary>
/// 直接抛出异常信息
/// </summary>
/// <param name="dataValidationResult"></param>
public static void ThrowValidateFailedModel(this DataValidationResult dataValidationResult)
{
if (!dataValidationResult.IsValid)
{
// 解析验证失败消息,输出统一格式
var validationFailMessage =
dataValidationResult.ValidationResults
.Select(u => new
{
MemberNames = u.MemberNames.Any() ? u.MemberNames : new[] { $"{dataValidationResult.MemberOrValue}" },
u.ErrorMessage
})
.OrderBy(u => u.MemberNames.First())
.GroupBy(u => u.MemberNames.First())
.ToDictionary(x => x.Key, u => u.Select(c => c.ErrorMessage).ToArray());
// 抛出验证失败异常
throw new AppFriendlyException(default, default, new ValidationException())
{
StatusCode = StatusCodes.Status400BadRequest,
ValidationException = true,
ErrorMessage = validationFailMessage,
};
}
}
}
}