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> /// ...
随机推荐
- 简单Json序列化和反序列化
序列化是什么: 序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得.序列化分为两大部分:序列化和反序列化.序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络 ...
- Bzoj3597: [Scoi2014]方伯伯运椰子
题面 传送门 Sol 消圈定理:如果一个费用流网络的残量网络有负环,那么这个费用流不优 于是这个题就可以建出残量网络,然后分数规划跑负环了 # include <bits/stdc++.h> ...
- BZOJ1258 [CQOI2007]三角形
Description 画一个等边三角形,把三边的中点连接起来,得到四个三角形,把它们称为T1,T2,T3,T4,如图1.把前三个三角形也这样划分,得到12个更小的三角形:T11,T12,T13,T1 ...
- 前端面试经典题目(HTML+CSS)二
1.浏览器页面由哪三层构成,分别是什么,作用是什么? 构成:结构层.表示层.行为层 分别是:HTML.CSS.JavaScript 作用:HTML实现页面结构,CSS完成页面的表现与风格,JavaSc ...
- 客户端和服务端如何使用Token和Session
一.我们先解释一下他的含义: 1.Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背 ...
- centos7上安装python3
一.安装环境及版本 CentOS 6.5 Python 3.6.1 二.安装依赖包 1.安装静态库 # yum install -y openssl-static 注:如果不安装该静态库,会导致pyt ...
- 数据分析之scipy常用方法(五)
1 Scipy简介 Scipy依赖于Numpy Scipy提供了真正的矩阵 Scipy包含的功能:最优化.线性代数.积分.插值.拟合.特殊函数.快速傅里叶变换.信号处理.图像处理.常微分方程求解器等 ...
- [翻译] IGLDropDownMenu
IGLDropDownMenu An iOS drop down menu with pretty animation. 一种iOS点击下拉菜单样式,动画效果很绚丽. Screenshot - 截图 ...
- MapReduce Design Patterns(chapter 2 (part 2))(三)
Median and standard deviation 中值和标准差的计算比前面的例子复杂一点.因为这种运算是非关联的,它们不是那么容易的能从combiner中获益.中值是将数据集一分为两等份的数 ...
- 查看oracle数据库最近执行了哪些sql语句
SELECT b.sql_text, --content of SQL a.machine, --which machine run this code a.username, a.module, - ...