时间:2021-05-18
前言
小明最近又遇到麻烦了,小红希望对接接口传送的数据进行验证,既然是小红要求,那小明说什么都得满足呀,这还不简单嘛。
传统验证
小明写着写着发现这样写,很多接口相同得地方都要写,使得代码比较臃肿。
使用模型验证
在参数模型上打上注解
namespace App001.Models{ /// <summary> /// 待办事项 /// </summary> public class Todo { /// <summary> /// ID /// </summary> public Guid Id { get; set; } /// <summary> /// 名称 /// </summary> [Required(ErrorMessage = "名称不能为空")] public string Name { get; set; } }}Postman测试Name传值未空时,则返回:
{ "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "One or more validation errors occurred.", "status": 400, "traceId": "|df184e36-4e11844dfd38a626.", "errors": { "Name": [ "名称不能为空" ] }}注意Web API 控制器具有 [ApiController] 特性,则它们不必检查ModelState.IsValid。在此情况下,如果模型状态无效,将返回包含错误详细信息的自动 HTTP 400 响应。
内置特性
Error messages
通过验证特性可以指定要为无效输入显示的错误消息。 例如:
[Required(ErrorMessage = "名称不能为空")]使用自定义返回消息格式
有两种方式:
使用自定义过滤器
首先,创建ModelValidateActionFilterAttribute过滤器。
public class ModelValidateActionFilterAttribute : ActionFilterAttribute{ public override void OnActionExecuting(ActionExecutingContext context) { if (!context.ModelState.IsValid) { //获取验证失败的模型字段 var errors = context.ModelState .Where(e => e.Value.Errors.Count > 0) .Select(e => e.Value.Errors.First().ErrorMessage) .ToList(); var str = string.Join("|", errors); //设置返回内容 var result = new { Code = 10000, Msg = "未通过数据验证。", FullMsg = str }; context.Result = new BadRequestObjectResult(result); } }}然后,Startup.ConfigureServices将过滤器添加到控制器中并关闭默认模型验证,另外我们还添加了AddNewtonsoftJson。
//关闭默认模型验证services.Configure<ApiBehaviorOptions>(opt => opt.SuppressModelStateInvalidFilter = true);services.AddControllers(opt =>{ //添加过滤器 opt.Filters.Add(typeof(ModelValidateActionFilterAttribute));}).AddNewtonsoftJson(opt =>{ //json字符串大小写原样输出 opt.SerializerSettings.ContractResolver = new DefaultContractResolver();});最后,我们看一下返回效果:
{ "Code": 10000, "Msg": "未通过数据验证。", "FullMsg": "名称不能为空。"}使用默认模型验证
小结
目前为止,小明把数据验证也搞定了,是不是so easy!
到此这篇关于手把手教你AspNetCore WebApi数据验证的实现的文章就介绍到这了,更多相关AspNetCore WebApi数据验证内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
手把手教你如何锁定三维视图的方向,方法快捷,好用,是你学习BIM的必须知道的事情!手把手教你如何锁定三维视图的方向软件名称:Autodeskrevit2017中
手把手教你win7系统怎么共享文件夹很多人都知道文件可以共享,但是很多网友也提出了,win7系统怎么共享文件夹呢?那么,下面,电脑达人将手把手教你win7系统怎
本篇文章通过分析react-loadable包的源码,手把手教你实现一个react的异步加载高阶组件1.首先我们想象中的react异步加载组件应该如何入参以及暴
手把手教你实现MYSQL的备份还原示例代码用我比较熟悉的PHP,当然你看完并理解了其中的思路,相信你也可以快速地用你熟悉的语言自己写出来。一、新建dbBacku
开网店的各位兄弟姐妹们,你们可曾想要征服各大引擎,让他们对你的店铺另眼相看?那就跟我来吧,手把手教你做网店推广,先伸出你的手把你的店铺放到google、百度、搜