Web Api在Int或DateTime如果传空值的话会自动帮忙设预设值,但是在ModelState.IsValid的时候,却会出现型别上的错误.

解决方式

把Model改成正确,也就是预设允许可以为null

public class DemoModel                              {                                                   public int? Id { get; set; }                    [Required]                                      public string Name { get; set; }                public DateTime? SelectedDate { get; set; }     }

但是这种解决方式却不能解决我的问题,更多这类情境其实还蛮容易发生在web form转到mvc或web api的时候,因为当你想要翻旧系统的时候,会想要把验证集中放在Model上面,不过即有好几仟个类别可能都已定型,甚至有些是还透过map或者直接对应db的状况,我们不可能去抓出所有会发生错误的状况,一一的去排除掉啊,那我的想法是否能只验证我有定义的attribute,而忽略掉型别的检查呢?如果int或datetime给空值的话,也不会出错呢?其实这个解法是笔者自己写出来的,google也都没有相关的解法,可能是普遍大家都不会这样子干,但是在笔者目前的情境却不得不这样做,所以是否要这样子做就视各位的情境了。

public class ValidateModelAttribute : ActionFilterAttribute{public override void OnActionExecuting(HttpActionContext actionContext){if (actionContext.ActionDescriptor.GetCustomAttributes<IgnoreValidateModelAttribute>(false).Any()){return;}var httpMethod = actionContext.Request.Method;            if (httpMethod == HttpMethod.Get || httpMethod == HttpMethod.Options){return;}var modelResult = new ModelStateDictionary();foreach (var item in actionContext.ModelState){var errors = item.Value.Errors.FirstOrDefault();var hasException = item.Value.Errors.Any(x => x.Exception != null);if (hasException){continue;}modelResult.AddModelError(item.Key, errors.ErrorMessage); //自行新增只有ErrorMessage的部份,而忽略型別轉換的錯誤提示}if (modelResult.Count > 0){actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, modelResult);}base.OnActionExecuting(actionContext);}}

以上述做法可以忽略有expection的错误提醒,但如果有expection的话那model error就会失效了,因为只要有任何expection的状况,就会中止这个属性的检查,不会再加入任何error,也就是说如果我们设定为required,并且属性也没有给nullable的话,而且client端传来又没有给值的话,结果我们的model验证却没有回应此栏位必须填值,就会变得非常怪异。

技术群:添加小编微信并备注进群

小编微信:mm1552923

公众号:dotNet编程大全

ModelState.IsValid忽略型别的检查错误相关推荐

  1. 受够了if (ModelState.IsValid)?ActionFitlter也是一路的坑啊!

    这篇博客真是干货,干得估计还有点"磕牙",所以还提供视频和代码.但基础稍弱的同学,怕还是得自行补充一些基础知识--就一篇文章,确实没办法面面俱到. 视频和代码下载:Demo - 百 ...

  2. .NET开发者常会忽略的几个错误

    .NET开发者常会忽略的几个错误 在运用Visiol studio.NET 开发Web 应用程式中,开发者常常会遇到一些问题:如我开发好的程式,在开发环境下测试没问题,怎么一搬到应用环境下,就会有问题 ...

  3. java 编译 忽略错误_Maven在Java8下如何忽略Javadoc的编译错误详解

    javaDoc简介And基础知识 (一) Java注释类型 //用于单行注释. /*...*/用于多行注释,从/*开始,到*/结束,不能嵌套. /**...*/则是为支持jdk工具javadoc.ex ...

  4. ASP.NET MVC里ModelState.IsValid总是true或者总是false

    概述 model的属性如果不加验证相关的特性,ModelState.IsValid会永远为true:如果加了验证相关的特性,不满足验证规则时,ModelState.IsValid为false.接收到参 ...

  5. Intellij IDEA设置忽略部分类编译错误

    有些时候我们的项目中有些错误,但这些错误并不影响项目的整体运行(或许是没有使用到),默认情况下idea是无法通过编译的,因此也就无法部署运行,要达到正确运行项目的目的需要作一些设置才行. 设置Inte ...

  6. 为什么mvc里面的ModelState.IsValid一只都是true

    http://zhidao.baidu.com/link?url=H69JQBpF8vbJEOUUc1RCjRZZ05gSGn6PiPL740aGgR3qIfFTT__pt4KgEg7O47lReYR ...

  7. centOs8安装docker报错:错误:事务检查错误

    运行sudo yum install docker-ce docker-ce-cli containerd.io命令安装docker时会报Transaction check error事物检查错误,试 ...

  8. 下载的软件包保存在缓存中,直到下次成功执行事务。 您可以通过执行 'dnf clean packages' 删除软件包缓存。 错误:事务检查错误

    下载的软件包保存在缓存中,直到下次成功执行事务. 您可以通过执行 'dnf clean packages' 删除软件包缓存. 错误:事务检查错误 使用yum安装时出现了这个错误,更新一下 sudo y ...

  9. Spelling Checker拼写检查错误提示(以及拼音提示功能)

    [color=olive] 拼写检查错误提示是搜索引擎都具备的一个功能,也就是说用户提交查询 给搜索引擎,搜索引擎检查看是否用户输入的拼写有错误,对于中文用户来说一般造成的错误是输入法造成的错误.那么 ...

最新文章

  1. Swift - 委托(delegate)的介绍,及使用样例
  2. 今天,小程序正式支持 SVG
  3. 光耦驱动单向可控硅_光耦是什麽?
  4. Node中的fs模块
  5. 一个WIFI热点的脚本思路,顺记shell知识
  6. 拓端tecdat|R语言文本挖掘、情感分析和可视化哈利波特小说文本数据
  7. Jquery 学习笔记一
  8. [百万级]通用分页存储过程.[千万级]实现千万级数据的分页显示!
  9. 百度之星程序设计大赛输出格式的注意
  10. 写好数学建模竞赛论文的那些事
  11. VC++实现QQ消息群发
  12. mysql indentify_ORA-01157: cannot identify/lock data file导致表空间无法on
  13. vscode能写winform窗体吗_VSCode——愉快的写C#
  14. 6.Libgdx扩展学习之Box2D_鼠标关节
  15. 20181207股票复盘
  16. 《5G智慧钢铁白皮书》重磅发布!
  17. SQL Server 2012 详细安装
  18. 蝉知 路径index.php,宝塔面板下蝉知cms nginx环境下完美伪静态的解决办法
  19. cypress代理商与ic芯片有哪些品牌
  20. 【转】Linux开启FTP服务和修改FTP密码

热门文章

  1. 企查查企业详情爬虫(自动模拟登录企业详情页法律风险爬取)
  2. Mac和Win7双系统 + 完美文件共享
  3. 网页旅游景点页面建设
  4. win10共享计算机win7,Win7系统和win10系统设置共享打印机的方法
  5. python把txt导入excel_python如何将txt文件导入excel
  6. android相机固定方向,如何正确设置Android相机方向?
  7. Maven插件之versions-maven-plugin
  8. 网格设计版式设计_编辑版式,排除项和CSS网格
  9. 计算机一级基础及msoffice应用,全国计算机等级考试教程一级计算机基础及MS Office应用...
  10. Python控制结构(二)