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> /// ...
随机推荐
- Python3.7安装Geenlet
1.首先再python文件下的Scripts文件夹下有这几个文件: 2.打开Scripts文件夹下可能你会发现是空的,这时候就要先安装setuptools了,安装完后Script文件下就出现上图的文件 ...
- Maven-pom-configuration
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- arcgis10.2 serverstyle 制作工具位置 小计
跟9.3时候的套路还是一样的,只是工具已经放到了arcgis desktop的安装目录的bin文件夹下面. engine和developerkit都不附带该工具. 但是engine会附带一组默认的转换 ...
- 下载 github 项目文件到本地方法
下载 github 项目文件到本地方法 本篇终极,收集 3 种方法 最厉害 666 的方法 直接访问网站: 操作如下: 本地工具版下载方法 首先需要下载 git 客户端 我就不转载了,上面有客户端的使 ...
- ubuntu16.0.4安装mysql5.7以及设置远程访问
1.安装mysql命令 sudo apt-get install mysql-server sudo apt install mysql-client sudo apt install libmysq ...
- C# 递归函数详细介绍及使用方法
什么是递归函数/方法? 任何一个方法既可以调用其他方法也可以调用自己,而当这个方法调用自己时,我们就叫它递归函数或递归方法. 通常递归有两个特点: 1. 递归方法一直会调用自己直到某些条件被满足 2. ...
- VS 2012 在 windows 8 中无法使用 Deubgger.Lunch() 对服务进行调试
找到了外文资料: Debugger.Launch() not displaying JIT debugger selection popup on Windows 8/8.1 If execu ...
- Python3基本数据类型(二、字符串)
Python3字符串 ①字符串比较 1.比较字符串是否相同: ==:使用==来比较两个字符串内的value值是否相同 is:比较两个字符串的id值. 2.字符串的长度比较 len():显示字符串的长度 ...
- c++计算器后续(2)
自娱自乐: 大概是了解了一下前缀.中缀.后缀表示法是啥,并没有去深究,比如考虑实现啊,然后Calculation类里面的计算方法还是选用原来的直接对中缀表达式求值,只是把代码改得规范点,以上. 各表示 ...
- 内网渗透中的mimikatz
0x00 前言 上篇测试了中间人攻击利用框架bettercap,这次挑选一款更具代表性的工具--mimikatz 0x01 简介 mimikatz,很多人称之为密码抓取神器,但在内网渗透中,远不止这么 ...