webapi中的模型验证
webapi中推荐我们使用Dto来创建接受实体和输出实体,对于有些传入/请求的参数是有限制的,非空,电话等等,我们可以统一进行处理这些。
需要了解:
webapi接受json参数:webapi 获取json数据
数据注解:Code First 二 DataAnnotation 数据注解
流程:我们需要使用方法过滤器在每次执行方法之前进行验证,处理验证结果。我们Dto需要使用数据注解来标识
单个方法验证:
[HttpPost]
public async Task<IHttpActionResult> VerifyAsync(TestInDto inDto)
{
if (ModelState.IsValid)
{
return await Task.FromResult(Ok(inDto));
}
else
{
List<KeyValuePair<string, ModelState>> vs = ModelState.ToList();
List<object> obj = new List<object>();
foreach (KeyValuePair<string, ModelState> item in vs)
{
IList<string> strList = new List<string>();
foreach (var err in item.Value.Errors)
{
strList.Add(err.ErrorMessage);
}
obj.Add(new
{
key = item.Key.Split('.')[],
errorMessage = strList
});
}
return await Task.FromResult(Ok(new { errcode=-,err=obj}));
}
}
public class TestInDto
{
/// <summary>
/// id
/// </summary>
public int? Id { get; set; } /// <summary>
///
/// </summary>
[Required(ErrorMessage ="名字不能为空")]
[StringLength(maximumLength:,ErrorMessage ="最大长度不能超过50")]
public string Name { get; set; }
}
使用方法过滤器:
①创建自己的方法过滤器

public class MyActionFilterAttribute : ActionFilterAttribute
{
public override Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
if (!actionContext.ModelState.IsValid)
{
List<KeyValuePair<string, ModelState>> vs = actionContext.ModelState.ToList();
List<object> objList = new List<object>();
foreach (KeyValuePair<string, ModelState> item in vs)
{
IList<string> strList = new List<string>();
foreach (ModelError err in item.Value.Errors)
{
strList.Add(err.ErrorMessage);
}
objList.Add(new
{
key = item.Key.Split('.')[],
errorMessage = strList
});
}
var obj = new
{
errcode = -,
err = objList
};
actionContext.Response = new HttpResponseMessage()
{
Content = new StringContent(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json") };
} return base.OnActionExecutingAsync(actionContext, cancellationToken);
}
②使用
针对单个方法:在方法上面使用特性来标识,也可以在控制器上面

全局:Global.asax 全球文件中添加

结果:

webapi中的模型验证的更多相关文章
- Web API中的模型验证
一.模型验证的作用 在ASP.NET Web API中,我们可以使用 System.ComponentModel.DataAnnotations 命名空间中的属性为模型上的属性设置验证规则. 一个模型 ...
- webapi中使用token验证(JWT验证)
本文介绍如何在webapi中使用JWT验证 准备 安装JWT安装包 System.IdentityModel.Tokens.Jwt 你的前端api登录请求的方法,参考 axios.get(" ...
- .net core 中api 模型验证
AddControllers/AddMvc方法允许添加自定义ActionFilterAttribute进行过滤 文档中这么定义Filter: 可以创建自定义筛选器,用于处理横切关注点. 横切关注点的示 ...
- 关于ASP.NET WebAPI中HTTP模型的相关思考
对于.NET的分布式应用开发,可以供我们选择的技术和框架比较多,例如webservice,.net remoting,MSMQ,WCF等等技术.对于这些技术很多人都不会陌生,即时没有深入的了解,但是肯 ...
- webapi Model Validation 模型验证
通常情况下,对于那些经常为别人提供数据接口的开发人员来说,对于调用方传递过来的参数都会有验证处理.例如: if (string.IsNullOrEmpty(entity.Name)) { //当姓名为 ...
- Web API中的模型验证Model Validation
数据注释 在ASP.NET Web API中,您可以使用System.ComponentModel.DataAnnotations命名空间中的属性为模型上的属性设置验证规则. using System ...
- ASP.NET Core WebApi中使用FluentValidation验证数据模型
原文链接:Common features in ASP.NET Core 2.1 WebApi: Validation 作者:Anthony Giretti 译者:Lamond Lu 介绍 验证用户输 ...
- 在asp.net WebAPI 中 使用Forms认证和ModelValidata(模型验证)
一.Forms认证 1.在webapi项目中启用Forms认证 Why:为什么要在WebAPI中使用Forms认证?因为其它项目使用的是Forms认证. What:什么是Forms认证?它在WebAP ...
- aspnet core 全局模型验证,统一api响应
上手就来 新建一个模型验证过滤器,其中ApiResp是自定义的统一响应类. public class VldFilter:IActionFilter { /// <summary> /// ...
随机推荐
- OpenStack IceHouse 部署 - 4 - 计算节点部署
Nova计算服务(计算节点) 参考 本页内容依照官方安装文档进行,具体参见Configure a compute node(nova service) 前置工作 数据库 由于我们在Nova(计算管理 ...
- NodeJS中resolve添加地址无效
今天一个朋友在群里问了这样一个问题,他使用url.resolve()添加地址无效,我看了一下,发现是他没有注意细节, resolve可以在二级目录下增加,他使用的时候只是一级目录,所以添加会有问题.他 ...
- Ajax 之XMLHttpRequest讲解
一直以来都听别人说Ajax,今天终于接触到了.......... 一.什么是Ajax? 答: AJAX即“Asynchronous Javascript And XML”(异步JavaScript和X ...
- axios中设置post请求,后台却无法识别参数
场景:在使用iview时,定义api请求时,代码如下 export const delWord = (data) => { return axios.request({ url: '/words ...
- D3.js 入门教程
最近需要用到d3, 记录下d3的教程 网上搜了几个关于d3的教程 D3.js 入门教程 http://wiki.jikexueyuan.com/project/d3wiki/author.h ...
- org.springframework.data.mongodb.core.MongoTemplate]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: org.springframework.core.convert.support.ConversionServiceFactory.cr
spring-data-mongo 和spring core包冲突.解决办法: <dependency> <groupId>org.springframework.data&l ...
- 用Appium让Android功能自动化测试飞起来
前言 做Android端功能自动化已有2年多的时间了,使用过的功能自动化框架有Robotium.Uiautomator.Appium.最近研究自动化case复用的方案,调研了Appium的自动化框架, ...
- SQL Server ->> ColumnStore Index(列存储索引)
Columnstored index是SQL Server 2012后加入的重大特性,数据不再以heap或者B Tree的形式存储(row level)存储在每一个数据库文件的页里面,而是以列为单位存 ...
- python基础——操作系统简介
不同应用领域的主流操作系统 l 桌面操作系统 l 服务器操作系统 l 嵌入式操作系统 l 移动设备操作系统 桌面操作系统 Windows系列 用户群体很大 MacOS 适合于开发人员 Linu ...
- mysql免安装版配置+navicat测试
好久之前就在mysql官网下载了mysql的包,但是一直没有安装.今天测试下. 下载好的mysql是一个zip压缩包,直接解压就可以了,然后改名为mysql,以免路径太复杂. 配置环境变量 把D:\A ...