.net5 .net6 WebAPI 参数验证 模型验证 ModelValid 接口参数校验 统一返回结构
.net5
利用InvalidModelStateResponseFactory
官网推荐做法 覆盖ModelState管理的默认行为,只有在数据验证失败时才会执行
services.Configure<ApiBehaviorOptions>(options =>
{
options.InvalidModelStateResponseFactory = (context) =>
{
//参数验证
services.Configure<ApiBehaviorOptions>(options =>
{
//只有在数据验证失败时才会执行
options.InvalidModelStateResponseFactory = (context) =>
{
var errors = context.ModelState.Select(f => new KeyValuePair<string, IEnumerable<string>>(f.Key, f.Value.Errors.Select(e => e.ErrorMessage)));
return new JsonResult(new APIResponseModel<object> { Code = ResponseEnum.FAIL.GetHashCode(), Message = JsonConvert.SerializeObject(errors), Data = errors });
};
});
};
});
.net6
builder.Services.Configure<ApiBehaviorOptions>(options =>
{
options.InvalidModelStateResponseFactory = (context) =>
{
//只有在数据验证失败时才会执行
//一次性返回所有的报错
//var errors = context.ModelState.Select(f => new KeyValuePair<string, IEnumerable<string>>(f.Key, f.Value.Errors.Select(e => e.ErrorMessage)));
//return new JsonResult(new APIResponseModel<object> { Code = ResponseEnum.Fail.GetHashCode(), Message = JsonConvert.SerializeObject(errors), Data = errors });
//返回第一条报错
var error = context.ModelState.Values.FirstOrDefault(f => f.ValidationState != Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Valid);//.Select(f => new KeyValuePair<string, IEnumerable<string>>(f.Key, f.Value.Errors.Select(e => e.ErrorMessage)));
if (error != null && error.Errors != null && error.Errors.Count > 0)
{
var errMsg = error.Errors.First().ErrorMessage;
return new JsonResult(new APIResponseModel<object> { Code = ResponseEnum.Fail.GetHashCode(), Message = errMsg });
}
return new JsonResult(new APIResponseModel<object> { Code = ResponseEnum.Fail.GetHashCode(), Message = "ModelError", Data = context.ModelState.Values });
};
});
自定义验证
public class NoSpaceAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
if (value is string str)
{
return !str.Contains(' ');
}
return false;
}
}
常用过滤器
| 类 | 说明 |
|---|---|
| AssociationAttribute | 指定某个实体成员表示某种数据关系,如外键关系。 |
| ConcurrencyCheckAttribute | 指定某属性将参与开放式并发检查。 |
| CustomValidationAttribute | 指定要执行的自定义方法以验证实体成员。 |
| DataTypeAttribute | 指定要与实体成员关联的附加类型的名称。 |
| DisplayAttribute | 为在用户界面中使用的实体类型和成员指定可本地化的字符串。 |
| DisplayColumnAttribute | 指定在将表用作外键关系中的父表时要显示的属性、用于排序的属性以及排序顺序。 |
| DisplayFormatAttribute | 指定如何显示数据字段以及如何设置数据字段的格式。 |
| EditableAttribute | 指定用户是否应能够更改实体属性的值。 |
| EnumDataTypeAttribute | 指定某个实体成员对应于某个枚举类型。 |
| FilterUIHintAttribute | 指定列的筛选行为。 |
| KeyAttribute | 指定一个或多个要用作实体的唯一标识的实体属性。 |
| RangeAttribute | 为关联成员指定最小值和最大值约束。 |
| RegularExpressionAttribute | 指定用于验证关联成员的正则表达式。 |
| RequiredAttribute | 指定必须为属性提供值。 |
| StringLengthAttribute | 指定一个实体成员允许的最大字符数和最小字符数。 |
| TimestampAttribute | 将某个成员指定为时间戳值。 |
| UIHintAttribute | 指定用于显示关联实体成员的控件和值。 |
| ValidationAttribute | 作为所有验证属性的基类。 |
| ValidationContext | 提供有关要验证的类型或成员的信息。 |
| ValidationException | 表示在验证使用某个验证属性标记的成员期间出现的异常。 |
| ValidationResult | 包含验证请求的结果。 |
| Validator | 提供成员以帮助使用关联 ValidationAttribute 属性的值验证对象和成员。 |
留待后查,同时方便他人
联系我:renhanlinbsl@163.com
联系我:renhanlinbsl@163.com

浙公网安备 33010602011771号