首页 技术 正文
技术 2022年11月10日
0 收藏 623 点赞 4,891 浏览 1899 个字

mic: https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api

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; }
}

使用方法过滤器:

①创建自己的方法过滤器

webapi中的模型验证

 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);
}

②使用

针对单个方法:在方法上面使用特性来标识,也可以在控制器上面

webapi中的模型验证

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

webapi中的模型验证

结果:

webapi中的模型验证

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,985
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,501
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,345
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,128
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,763
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,839