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.pswp.cn/news/280247.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280247.shtml
英文地址,請注明出處:http://en.pswp.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…