参考博文: 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("|") 要直观的多