.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
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步