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> /// ...
随机推荐
- Vue使用html2Canvas和canvas2Image下载二维码会模糊的问题解决方法
// 下载二维码图片的方法 saveImg() { var self = this; html2canvas(document.querySelector(".savePic"), ...
- 我的CSDN博客&Github地址
我的 CSDN 博客地址: https://blog.csdn.net/qq_40147863 Github 地址: https://github.com/xpwi
- 用户登陆显示cpu、负载、内存信息
#用户登陆显示cpu.负载.内存信息 #!/bin/bash # hostip=`ifconfig eth0 |awk -F" +|:" '/Bcast/{print $4}'` ...
- PHP中die()、exit()、return的区别
1.die()是exit()的别名函数,用法与exit()完全相同,php手册上的说法是,“使用这种别名通常不是个好主意,因为这种别名可能会被完全废弃或更名,导致脚本难以移植到新版本的 PHP 上.” ...
- linux下pgAdmin4安装
首先到pgAdmin4官方网站下载安装包:https://www.pgadmin.org/download/ 我下载的是3.0; 到文件所在目录执行安装命令: sudo pip install ./p ...
- Mybatis学习---基础知识考核
MyBatis 2.什么是MyBatis的接口绑定,有什么好处 接口映射就是在IBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定, 我们直接调用接口方法就可以,这样比起原来了Sql ...
- Mysql学习---使用Python执行存储过程
使用Python执行存储过程 使用Python执行存储过程[2部分]: 1.执行存储过程,获取存储过程的结果集 2.将返回值设置给了 @_存储过程名_序号 = #!/usr/bin/env pyt ...
- MQ环境的搭建
MQ环境的搭建
- redis下的持久化保存
rdb.h rdb.c ---> 完成数据保存到临时文件,再利用rename保存到指定文件的过程: 如果需要写一个数据持久化保存的功能时,可以参考这部分代码: //rdb API int ...
- [BZOJ 1647][USACO 2007 Open] Fliptile 翻格子游戏
1647: [Usaco2007 Open]Fliptile 翻格子游戏 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 702 Solved: 281[ ...