if (!ModelState.IsValid)
{
    //TODO 模型验证失败需要做的事情
}

上面的代码不管是在传统的ASP.NET还是新一代ASP.NET Core中都是为了验证模型的状态是否合法,如果IsValid属性的值为True,则验证成功。这样的代码一般我们会写在Action方法中的最开始处,如果在每个Action中都写这样的判断就会增加我们的工作量和以及存在重复性,在这篇文章中将讨论如何自动进行模型验证。

要实现这个功能首先需要定义一个ActionFilter

public class ValidateModelStateAttribute : Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (!context.ModelState.IsValid)
        {
            List<string> errorList = new List<string>();
            foreach (var modelState in context.ModelState.Values)
            {
                foreach (var error in modelState.Errors)
                {
                    errorList.Add(error.ErrorMessage);
                }
            }
            context.Result = new JsonResult(new { success = false, message = errorList });
        }
    }
}

在每个Action执行之前都会进行模型验证。修改启动类

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc(options =>
    {
        options.Filters.Add(typeof(ValidateModelStateAttribute));
    });
}

自动进行模型验证就实现了。走个实验:

public class User
{
    [Required]
    [EmailAddress]
    public string Email { get; set; }
    [Required]
    public string Name { get; set; }
}
[HttpPost]
public IActionResult Insert(User user)
{
    return Json(user);
}

是不是有点AOP的意思呢?

原文地址:http://www.talkingdotnet.com/validate-model-state-automatically-asp-net-core-2-0/

最新文章

  1. 就这么漂来漂去---一个毕业三个月的java程序员的裸辞风波
  2. YYModel 源码解读(二)之NSObject+YYModel.h (2)
  3. 快速傅里叶(FFT)的快速深度思考
  4. Leetcode: Validate IP Address
  5. 常见linux命令释义(第二天)
  6. C语言中的位操作(14)--反转比特位
  7. sql脚本比较大,sqlserver 无法导入,就用cmd命令执行
  8. leetcode majority number
  9. Delphi 为什么它提示PCHAR是不安全的类型呢 Unsafe type &#39;PChar&#39;
  10. SQLServer中临时表与表变量的区别分析【转】
  11. 今天学习的裸板驱动之存储控制器心得(初始化SDRAM)
  12. react+redux+generation-modation脚手架添加一个todolist
  13. sublime汉化教程
  14. MYSQL(三)
  15. This Gradle plugin requires a newer IDE able to request IDE model level 3. For Android Studio this means v3+
  16. SPOJ GSS系列
  17. 2018-11-3&amp; maven
  18. ES6学习笔记六:迭代
  19. Linux regulator系统
  20. beta 发布的相关评论

热门文章

  1. JXLS 2.4.0系列教程(六)番外篇——导出图片(完结)
  2. C#采用rabbitMQ搭建分布式日志系统
  3. vue-router自动判断左右翻页转场动画
  4. php中urldecode()和urlencode()起什么作用啊
  5. win7下IIS的安装和配置
  6. OpenCV鼠标滑轮事件
  7. protobuf 原理
  8. js双向绑定和地址传递带来的痛苦解决方案之对象拷贝
  9. python_tornado_session用户验证
  10. python_如何定义带参数的装饰器?