ModelState.IsValid忽略型别的检查错误

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验证却没有回应此栏位必须填值,就会变得非常怪异。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 指纹添加_如何将手势添加到Android手机的指纹扫描仪

android 指纹添加So you have a shiny new Android phone, equipped with a security-friendly fingerprint scanner. Congratulations! But did you know that, while useful on its own, you can actually make the fingerprint scanner do more than just unlock your phone…

关于前端性能优化

常用的优化有两部分 第一&#xff1a;面向内容的优化 减少 HTTP 请求减少 DNS 查找避免重定向使用 Ajax 缓存延迟载入组件预先载入组件减少 DOM 元素数量切分组件到多个域最小化 iframe 的数量不要出现http 404 错误第二&#xff1a;面向 Server 缩小 Cookie针对 Web 组件使用域…

前端工程化:围绕Jenkins打造工作流的过程

背景 1年前入职时&#xff0c;公司前端部门的静态代码部署都是用ftp工具拖拽部署&#xff0c;没有记录&#xff0c;没有关联&#xff0c;经常造成许多困扰的问题&#xff0c; 比如&#xff1a;今天有没有其他人在我要部署的路径上工作&#xff1f;我的代码为啥被盖掉了&#xf…

业务id转密文短链的一种实现思路

业务场景&#xff1a; 买家通过电商app下单后&#xff0c;会受到一条短信&#xff0c;短信内容中包括改订单详情页面的h5地址连接&#xff0c;因为是出现在短信中&#xff0c;所以对连接有要求&#xff1a;1.尽量短&#xff1b;2.安全性考虑&#xff0c;订单在数据库中对应的自…

百度高管:问心无愧

1月23日下午消息&#xff0c;今天下午&#xff0c;百度召开百家号2019内容创作者盛典&#xff0c;百度副总裁沈抖出席并发布演讲。 就在前一天&#xff0c;一篇名为《搜索引擎百度已死》的文章刷屏&#xff0c;文中提到百度搜索有一半以上会指向百度自家产品&#xff0c;尤其百…

Vuex 学习笔记

Vuex 是什么&#xff1f; Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。由于SPA应用的模块化&#xff0c;每个组件都有它各自的数据&#xff08;state&#xff09;、视图&#xff08;view&#xff09;和方法&#xff08;actions&#xff09;&#xff0c;当项目内容越来越…

xdf文档怎么转换为pdf_如何将PDF文件和图像转换为Google文档文档

xdf文档怎么转换为pdfYou probably know you can create and edit documents with Google Docs, but you can edit more than just .doc files. Google Drive can also convert any PDF, JPG, PNG, or GIF into a document with fully editable text. Here’s how. 您可能知道可…

在现代 Windows 上使用经典 Windows 2000、XP、Vista 任务栏

你好&#xff0c;这里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;实用的工具和组件&#xff0c;希望对您有用&#xff01;前言您第一次使用的 Windows 是哪个版本的&#xff1f;我最早使用的 Windows XP&#xff0c;然后再经过 XP、7、8/8.1 、Windows 10&a…

oracle sys可以登录,system权限不足,解决方法

今天在自己电脑上安装了oracle 11g&#xff0c;安装成功后发现 sys 可以正常登录。system 无法登录&#xff0c;显示 ORA-01031: insufficient privileges(权限不足) select * from v$pwfile_users; 查看有sysdba权限的用户 grant sysdba to system; 给system 授权sysdba权限…

airdroid黑屏_如何使用AirDroid从PC控制Android设备

airdroid黑屏AirDroid for Android replaces your USB cable for connecting to your PC. Transfer files back and forth, send text messages, play music, view your photos, and manage applications using a web browser or a desktop client. 适用于Android的AirDroid取代…

分析java程序

2019独角兽企业重金招聘Python工程师标准>>> 最近公司的一个账单推送的服务&#xff0c;发现有延迟。我排查的时候发现&#xff0c;有一个程序日志不动了&#xff08;采用消息队列&#xff0c;部署了两台服务器来负载均衡&#xff09;。 网上说&#xff1a; jstack …

环境部署(九):linux下安装python+chrome+Xvfb

在基于selenium进行的UI自动化测试中&#xff0c;开发调试环境一般都是windows操作系统。完成后需要部署到专门的测试环境。 如要要部署到linux环境的服务器&#xff08;阿里云、腾讯云&#xff09;执行&#xff0c;那么测试脚本也需要对应的浏览器支持&#xff0c; 才能正常进…

地理围栏_什么是“地理围栏”?

地理围栏The term is popping up more frequently in news articles, appearing in product manuals, and highlighted as a feature in tons of mobile applications, but what exactly is geofencing? Read on as we explain what it is, why it’s appearing in more produ…

219. 单页应用 会话管理(session、cookie、jwt)

原文链接&#xff1a;https://github.com/ly525/blog... 关键字&#xff1a;http-only, cookie,sessionid, vue-router, react-router, 安全&#xff0c;localStorage, jwt 需求描述 内部管理平台&#xff0c;需要用户登录之后才能访问。现在将 该平台地址&#xff08;www.xxx.…

(原+译)使用numpy.savez保存字典后读取的问题

转载请注明出处&#xff1a; http://www.cnblogs.com/darkknightzh/p/7608928.html 参考网址; https://stackoverflow.com/questions/22315595/saving-dictionary-of-header-information-using-numpy-savez python中&#xff0c;使用pickle保存变量时&#xff0c;如果变量过大&…

NLog 通过http保存日志

简介NLog是一个基于.NET平台编写的类库&#xff0c;我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。 NLog是一个简单灵活的.NET日志记录类库。通过使用NLog&#xff0c;我们可以在任何一种.NET语言中输出带有上下文的&#xff08;contextual information&#xff09…

嵌套映射

1. 多对一嵌套查询映射使用案例 package com.zixue.dao;import com.zixue.annotation.MyBatisRepository; import com.zixue.entity.Emp;/*** 员工表的DAO组件* */ MyBatisRepository public interface EmpDao {void save(Emp emp);Emp findById(int id);Emp findById2(int id)…

gopro dataset_如何将GoPro安装到DSLR相机

gopro datasetIf you have a DSLR camera with a hot shoe, it’s easy to attach various flashes and other accessories right to your camera. But with a couple of cheap attachments on hand, you can mount your GoPro to your DSLR camera as well. 如果您的DSLR相机带…

音频 m4a 转 wav

背景最近做智能家居&#xff0c;需要用到一些应答词 需要自己录制。但是在mac下面通过 QuickTime 录制的是 m4a格式。但是应答词需要 wav格式。所以就需要转化了解决方法# sox 不行&#xff0c; ffmpeg 很麻烦&#xff0c;用 avconv 很简单。安装 如果没有就安装 # apt-get ins…

jQuery已经过时了,还需要学吗?

说起jQuery&#xff0c;很多刚参加工作的程序员都没用过&#xff0c;甚至没听过。曾几何时jQuery可是秒杀一切Js库&#xff0c;大有一统江山的情况&#xff0c;可是在顶峰的时候&#xff0c;瞬间被Vue、React、Angela三大框架斩于马下。从百度指数&#xff0c;我们也看出在2015…