手把手教你AspNetCore WebApi数据验证的实现_实用技巧

来源:脚本之家  责任编辑:小易  

www.zgxue.com防采集请勿采集本网。

前言

小明最近又遇到麻烦了,小红希望对接接口传送的数据进行验证,既然是小红要求,那小明说什么都得满足呀,这还不简单嘛。

传统验证

[HttpPost]public async Task<ActionResult<Todo>> PostTodo(Todo todo){ if (string.IsNullOrEmpty(todo.Name)) { return Ok("名称不能为空"); } context.Todo.Add(todo); await context.SaveChangesAsync(); return CreatedAtAction("GetTodo", new { id = todo.Id }, todo);}

小明写着写着发现这样写,很多接口相同得地方都要写,使得代码比较臃肿。

使用模型验证

在参数模型上打上注解

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 响应。

内置特性 [CreditCard]:验证属性是否具有信用卡格式。 [Compare]:验证模型中的两个属性是否匹配。 [EmailAddress]:验证属性是否具有电子邮件格式。 [Phone]:验证属性是否具有电话号码格式。 [Range]:验证属性值是否在指定的范围内。 [RegularExpression]:验证属性值是否与指定的正则表达式匹配。 [Required]:验证字段是否不为 null。 [StringLength]:验证字符串属性值是否不超过指定长度限制。 [Url]:验证属性是否具有 URL 格式。 [Remote]:通过在服务器上调用操作方法来验证客户端上的输入。

Error messages

通过验证特性可以指定要为无效输入显示的错误消息。 例如:

[Required(ErrorMessage = "名称不能为空")]

使用自定义返回消息格式

有两种方式: 使用自定义过滤器 使用默认模型验证,需要在控制器上面加上【ApiController】。

使用自定义过滤器

首先,创建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": "名称不能为空。"}

使用默认模型验证

services.Configure<ApiBehaviorOptions>(opt =>{ opt.InvalidModelStateResponseFactory = actionContext => { //获取验证失败的模型字段 var errors = actionContext.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 }; return new BadRequestObjectResult(result); };});

小结

目前为止,小明把数据验证也搞定了,是不是so easy!

到此这篇关于手把手教你AspNetCore WebApi数据验证的实现的文章就介绍到这了,更多相关AspNetCore WebApi数据验证内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网! 您可能感兴趣的文章:ASP.NET Core实现自定义WebApi模型验证详解ASP.NET Core WebApi中使用FluentValidation验证数据模型的方法

RESTSHARP获取图片资源读取到FILSTREAM,System.File写入本地PATH,这个还是很简单的啊,,,,内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • asp.net 代码隐藏的编码模型
  • datagridview中绑定datatable数据及相关操作实现代码
  • wpf实现渐变淡入淡出的登陆窗口效果
  • .net生成水印更好的方法实例代码
  • 解决asp.net中"/"应用程序中的服务器错误的方法
  • wpf下yuv播放的d3d解决方案
  • c#/.net读取或修改文件的创建时间及修改时间详解
  • asp.net socket客户端(远程发送和接收数据)
  • 深入解读asp.net core身份认证过程实现
  • asp.net过滤器的应用方法介绍
  • 我使用 .net core webapi 怎么获取图片并存到本地...
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础应用实用技巧自学过程首页asp.netasp.net core实现自定义webapi模型验证详解asp.net core webapi中使用fluentvalidation验证数据模型的方法asp.net 代码隐藏的编码模型datagridview中绑定datatable数据及相关操作实现代码wpf实现渐变淡入淡出的登陆窗口效果.net生成水印更好的方法实例代码解决asp.net中"/"应用程序中的服务器错误的方法wpf下yuv播放的d3d解决方案c#/.net读取或修改文件的创建时间及修改时间详解asp.net socket客户端(远程发送和接收数据)深入解读asp.net core身份认证过程实现asp.net过滤器的应用方法介绍未将对象引用设置到对象的实例 (java正则表达式 pattern和matcheasp.net(c#)网页跳转七种方法小结未能加载文件或程序集“xxx”或它asp.net“服务器应用程序不可用”asp.net中的几种弹出框提示基本实asp.net gridview 72般绝技asp.net生成excel并导出下载五种asp.net对路径"xxxxx"asp.net汉字转拼音和获取汉字首字vs2015自带localdb数据库用法详解asp.net实现上传excel功能.net 对于pdf生成以及各种转换的操作在.net中使用newtonsoft.json转换,读取,写.net orm性能测试分析查看json输出的*最方便*的方法 (转)visual studio 2010崩溃重启问题(源文件编asp.net sqldatareader绑定repeaterdatagrid同时具有分页和排序功能及注意点asp.net mvc 权限过滤和单点登录(禁止重
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved