Net Core 自定义模型验证记录

参考博文:
https://ask.csdn.net/questions/702012
https://www.cnblogs.com/lex-wu/p/11265458.html
https://www.cnblogs.com/cgzl/ 以及杨旭大佬的bilibili视频以及代码 自己搜

  开发的时候 前端经常抱怨我们字段的一些说明在swagger 里面也没有做的完全的说明 于是 想起来Net有一套模型验证的东西的 然后就开始去了解 System.ComponentModel.DataAnnotations

如果只是开启这个东西  会有默认的验证提示  不喜欢于是就换

services.AddMvc(options=> {
                options.MaxModelValidationErrors = 30;
            })

  开启错误提示数量  不超过30个不会停的  可以一直捕获30个后续的不抛出 好像是这么个意思

services.Configure<ApiBehaviorOptions>(options =>
            {
                options.InvalidModelStateResponseFactory = (context) =>
                {
                    //var error = context.ModelState.Select(x => x.Value.Errors?.FirstOrDefault().ErrorMessage).ToList();
                    var newError = context.ModelState.Where(x => x.Value.Errors.Count > 0)
                    .Select(x => new { Name = x.Key, Message = x.Value.Errors?.FirstOrDefault().ErrorMessage}).ToList();
                    //return new Microsoft.AspNetCore.Mvc.BadRequestObjectResult($"参数验证不通过:{string.Join("|",error)}");
                    return new UnprocessableEntityObjectResult($"参数验证不通过:{JsonConvert.SerializeObject(newError)}");
                };
            });

  接下来就是这么去获取具体的提示就完事了

[{"Name":"Age","Message":"年龄范围为1-130"},{"Name":"Txt","Message":"内容的长度为2-100"},{"Name":"phone","Message":"手机格式不对"},{"Name":"disname","Message":"描述必须大于2个字符"}]

  测试得到这么一个Json字符串的提示 看起来要比之前的 String.Join("|") 要直观的多

猜你喜欢

转载自www.cnblogs.com/litianfeng-net/p/12792287.html
今日推荐