华域联盟 .Net 手把手教你AspNetCore WebApi数据验证的实现

手把手教你AspNetCore WebApi数据验证的实现

手把手教你AspNetCore WebApi数据验证的实现
 更新时间:2020年10月12日 09:58:03   作者:深度码农  

这篇文章主要介绍了手把手教你AspNetCore WebApi数据验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

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

[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": "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验证数据模型的方法

ASP.NET
Core
WebApi
数据验证

相关文章
asp.net中Datalist使用数字分页的实现方法asp.net下Datalist使用数字分页的实现代码,需要的朋友可以参考下。 2010-10-10
详解ASP.NET Core端点路由的作用原理这篇文章主要介绍了详解ASP.NET Core端点路由的作用原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2020-07-07
基于.net4.0实现IdentityServer4客户端JWT解密这篇文章主要为大家详细介绍了基于.net4.0实现IdentityServer4客户端JWT解密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2018-09-09
Asp.Net文本换行Asp.Net文本换行... 2007-04-04
asp.net发布后web.config中compilation的debug的值true和false区在本篇文章里小编给大家整理的是一篇关于asp.net发布后web.config中compilation的debug的值true和false区别点内容,有需要的为朋友们可以参考下。 2020-01-01
ASP.NET Core扩展库之实体映射使用详解这篇文章主要介绍了ASP.NET Core扩展库之实体映射使用详解,帮助大家更好的理解和学习使用.net技术,感兴趣的朋友可以了解下 2021-03-03
asp.net中MD5 16位和32位加密函数asp.net中MD5 16位和32位加密函数... 2007-03-03
asp.net自定义分页控件示例这篇文章主要介绍了asp.net自定义分页控件示例,大家参考使用吧 2014-01-01
使用.NET存储XML数据的方法使用.NET存储XML数据的方法... 2007-04-04
Opencv2.4.13与Visual Studio2013环境搭建配置教程这篇文章主要为大家详细介绍了Opencv2.4.13 与Visual Studio2013环境搭建配置教程的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-03-03

最新评论

本文由 华域联盟 原创撰写:华域联盟 » 手把手教你AspNetCore WebApi数据验证的实现

转载请保留出处和原文链接:https://www.cnhackhy.com/5047.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者:

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部