手机版

详细说明如何向ASP.NET CORE添加统一的模型验证处理机制

时间:2021-08-31 来源:互联网 编辑:宝哥软件园 浏览:

一.导言

自since MVC以来,就提供了模型验证。我们可以在Model(DTO)的属性中添加数据注释,并在进入Action之前根据数据注释验证输入的数据是否合法。下面描述如何统一处理验证和返回错误消息。话不多说,我们来看看详细的介绍。

2.动作过滤器的统一验证

我们在判断验证状态时,通常会判断ModelState是否为。IsValid在操作中为真。

public interActionresult create([from body]createordedtodo){ if(model state。isvalid) {//todo:}}如果我们在每一个需要验证的Action中写下这个判断不是太麻烦的话,是否可以在输入之前验证所有的Action?如果有错误,我们将直接返回错误消息,而不是执行操作。我们可以使用MVC的ActionFilter,也就是Action过滤器,来统一执行Action之前的判断处理。

1.首先,定义一个通用的返回结果类:

公共类XcHttpResult {公共字符串Msg { get设置;}公共bool Result { get设置;}}2.定义动作过滤器

公共类XcActionFilter : IActionFilter { public void on actionexecuting(actionexecuting context){ if(!语境。ModelState . is valid){ xchttpresslt结果=new xchttpresslt(){ Result=false };foreach(上下文中的var项。模型状态。值){ foreach(项目中的变量错误。错误){结果。Msg=错误。错误消息“|”;} }上下文。结果=新的JsonResult(结果);} } public void on actionexecuted(actioexecutedcontextcontext){ } } 3。配置过滤器

在Startup.cs中配置过滤器以使其有效:

public void ConfigureServices(IServiceCollection services){ services。AddMvc(选项={ options。filters . AddXcActionFilter();});}三。测试

定义一个DTO:

公共类createorddto {[必需的(errormessage='商品标识不能为空')]公共字符串ProductId { get设置;}[必选(ErrorMessage='购买商品的数量不能为空')][范围(1,999,ErrorMessage='购买商品的数量必须在1到999之间')]public int Number { get;设置;}=0;[必选(错误消息='用户标识不能为空')]公共字符串UserId { get设置;}}使用Postman测试接口:

可见已经验证成功了!商品数量的取值范围是1~999,但是我输入了9999,被拦截成功,返回了错误信息。

摘要

以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。

版权声明:详细说明如何向ASP.NET CORE添加统一的模型验证处理机制是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。