第六章 數(shù)據(jù)驗證_第1頁
第六章 數(shù)據(jù)驗證_第2頁
第六章 數(shù)據(jù)驗證_第3頁
第六章 數(shù)據(jù)驗證_第4頁
第六章 數(shù)據(jù)驗證_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

ASP.NETMVC程序開發(fā)第六章數(shù)據(jù)驗證第六章數(shù)據(jù)驗證ASP.NETMVC程序開發(fā)第

2頁6.1MVC數(shù)據(jù)驗證概述6.2驗證屬性的使用6.3自定義驗證6.4擴充基于EntityFramework的數(shù)據(jù)模型小結(jié)6.1MVC數(shù)據(jù)驗證概述ASP.NETMVC程序開發(fā)第

3頁原因:ASP.NETMVC中視圖(View)負(fù)責(zé)向用戶呈現(xiàn)操作界面、收集數(shù)據(jù)并傳回服務(wù)器。在用戶使用過程中,由于用戶疏忽或惡意原因,用戶輸入數(shù)據(jù)對系統(tǒng)可能存在各種隱患,因此需要對從用戶界面收集的數(shù)據(jù)進行各種規(guī)則的驗證,確保數(shù)據(jù)符合系統(tǒng)要求。6.1MVC數(shù)據(jù)驗證概述ASP.NETMVC程序開發(fā)第

4頁雙重驗證:Web應(yīng)用程序必須對用戶輸入進行驗證,不僅需要在客戶端進行驗證,在服務(wù)器端也需要進行驗證??蛻舳诉M行驗證會對用戶向表單中輸入的數(shù)據(jù)給出即時的反饋,提高用戶體驗;在服務(wù)器端進行用戶輸入驗證除了服務(wù)器端驗證可以實現(xiàn)更復(fù)雜的驗證邏輯外,主要是由于來自網(wǎng)絡(luò)的數(shù)據(jù)是不能信息的。6.1MVC數(shù)據(jù)驗證概述ASP.NETMVC程序開發(fā)第

5頁方案:用戶輸入數(shù)據(jù)的驗證既包括邏輯驗證,也需要實現(xiàn)用戶友好的錯誤提示信息,當(dāng)驗證失敗時,把提示信息顯示到用戶界面上,而且還需要提供從驗證失敗中恢復(fù)的機制。ASP.NETMVC進行驗證最主要的是關(guān)注驗證模型的值。ASP.NETMVC驗證框架是可擴展的,可以采用開發(fā)人員想要的方式構(gòu)建驗證模式,默認(rèn)的方法是聲明式驗證。6.1MVC數(shù)據(jù)驗證概述ASP.NETMVC程序開發(fā)第

6頁流程:6.1MVC數(shù)據(jù)驗證概述ASP.NETMVC程序開發(fā)第

7頁步驟:1.用戶提交數(shù)據(jù)時在客戶端瀏覽器中進行驗證,驗證操作包括:驗證所有必須填寫的內(nèi)容是否已填寫;驗證數(shù)據(jù)的格式是否符合要求;如果可驗,則驗證數(shù)據(jù)的數(shù)據(jù)類型;如果發(fā)現(xiàn)有數(shù)據(jù)是無效的,則立即反饋如何修改無效數(shù)據(jù)為有效數(shù)據(jù)的信息給客戶,但數(shù)據(jù)不提交給服務(wù)器,當(dāng)用戶修改所有數(shù)據(jù)符合驗證要求后,用戶才能把數(shù)據(jù)提交給服務(wù)器。6.1MVC數(shù)據(jù)驗證概述ASP.NETMVC程序開發(fā)第

8頁步驟:2.當(dāng)所用客戶端驗證都通過后,數(shù)據(jù)被提交給服務(wù)器;3.在服務(wù)器端對數(shù)據(jù)按服務(wù)器的驗證要求進行數(shù)據(jù)有效性驗證,以保證數(shù)據(jù)符合業(yè)務(wù)規(guī)則的要求以及請求數(shù)據(jù)中不包含潛在的攻擊。如果數(shù)據(jù)驗證失敗,則數(shù)據(jù)不會按業(yè)務(wù)流程進行處理而是會把驗證的錯誤信息反饋回客戶端,讓用戶進行必要的修改;4.當(dāng)服務(wù)器端對數(shù)據(jù)有效性驗證通過后,業(yè)務(wù)處理流程才繼續(xù)進行,最終顯示一個處理結(jié)果的View或下載文件等。6.2驗證屬性的使用ASP.NETMVC程序開發(fā)第

9頁客戶端方案:如果開發(fā)人員自行編寫在客戶端進行用戶數(shù)據(jù)有效性驗證的代碼,則不僅工作繁瑣,而且很可能會有各種漏洞,為此ASP.NETMVC提供了簡單方便的方式提供用戶輸入數(shù)據(jù)有效性驗證功能,主要通過對數(shù)據(jù)添加相應(yīng)的屬性,并在客戶端配合對應(yīng)的驗證用JavaScript代碼庫。由于JavaScript代碼庫已由IDE在創(chuàng)建項目時提供,所以開發(fā)人員主要是在ViewModle中為各屬性添加需要的各種屬性以確定各屬性必須滿足的各種有效性驗證要求。6.2驗證屬性的使用ASP.NETMVC程序開發(fā)第

10頁示例:用戶賬號創(chuàng)建及管理的數(shù)據(jù)有效性驗證6.2驗證屬性的使用ASP.NETMVC程序開發(fā)第

11頁服務(wù)器端方案:當(dāng)客戶端的瀏覽器由于禁用了JavaScript腳本而無法進行有效性驗證,直接把空數(shù)據(jù)提交給服務(wù)器,則服務(wù)器的注冊功能實際執(zhí)行的Action(即本示例對應(yīng)AccountController中的Register(RegisterModelmodel)這一Action),通過應(yīng)用ModelState.IsValid這一屬性進行服務(wù)器端的有效性驗證判斷,自動應(yīng)用ViewModel中各屬性設(shè)定的驗證規(guī)則進行了有效性驗證,無效數(shù)據(jù)(空數(shù)據(jù))不會被寫入到系統(tǒng)中。6.2驗證屬性的使用ASP.NETMVC程序開發(fā)第

12頁驗證過程代碼:ASP.NETMVC由三個部分代碼完成了客戶端和服務(wù)器端的用戶輸入數(shù)據(jù)有效性驗證全過程,此三部分代碼為:View中使用的強類型Model對應(yīng)的類中各屬性使用驗證屬性;View中引入對應(yīng)的客戶端驗證用JQuery代碼;服務(wù)器對應(yīng)Action中使用ModelState.IsValid來判斷用戶輸入數(shù)據(jù)的有效性。6.2驗證屬性的使用ASP.NETMVC程序開發(fā)第

13頁自定義錯誤提示消息及其本地化:驗證錯誤時顯示的原始錯誤信息對于最終用戶來說并不友好的錯誤提示消息,例如其中可能會有英文單詞、計算機專業(yè)詞匯等。為此,每個驗證屬性都允許傳遞一個帶有自定義錯誤提示消息的參數(shù),這一參數(shù)在上一小節(jié)示例的代碼基礎(chǔ)上,直接添加在原有參數(shù)的后面,并用英文的逗號分隔,參數(shù)名為ErrorMessage。6.2驗證屬性的使用ASP.NETMVC程序開發(fā)第

14頁示例:自定義錯誤提示消息及其本地化6.3自定義驗證ASP.NETMVC程序開發(fā)第

15頁ASP.NETMVC框架具有良好的擴展性,可以實現(xiàn)自定義驗證邏輯。一般自定義驗證的實現(xiàn)方法主要為:將驗證邏輯封裝在自定義的驗證屬性中;將驗證邏輯封裝在模型對象中。把驗證邏輯封裝在自定義驗證屬性中可以輕松地實現(xiàn)在多個模型中重用驗證邏輯;而將驗證邏輯直接放入模型對象中,則可以較容易地編碼實現(xiàn),但這種方式不利于實現(xiàn)驗證邏輯的重用。6.3自定義驗證ASP.NETMVC程序開發(fā)第

16頁自定義驗證屬性示例:限制用戶電子郵箱地址的最大長度6.3自定義驗證ASP.NETMVC程序開發(fā)第

17頁IValidatableObject:將驗證邏輯封裝在模型對象中的方法也就是自驗證模型技術(shù),自驗證模型主要是Model自身知道如何驗證自身的模型對象。一個Model通過實現(xiàn)IValidatableObject接口來實現(xiàn)對自身的驗證。6.3自定義驗證ASP.NETMVC程序開發(fā)第

18頁IValidatableObject示例:直接在Model中實現(xiàn)對ClientName長度的驗證6.4擴充基于EntityFramework的數(shù)據(jù)模型ASP.NETMVC程序開發(fā)第

19頁原因:隨著模板和自動代碼生成技術(shù)的應(yīng)用,有許多應(yīng)用中都通過各類工具生成一些類(如EntityFramework等各類ORM技術(shù)生成的基本數(shù)據(jù)模型中的類),但這些類可能難以滿足全部的要求,所以需要擴充這些工具生成的數(shù)據(jù)模型類。在實際開發(fā)過程中,雖然可以通過手工修改工具生成的類來滿足開發(fā)的要求,但一般情況下,不應(yīng)用手工去修改工具生成的類,因為開發(fā)過程中很可能需要多次通過工具重新生成這些類,那么在重新生成時,這些類中手工修改的內(nèi)容就會自動被清除。6.4擴充基于EntityFramework的數(shù)據(jù)模型ASP.NETMVC程序開發(fā)第

20頁解決方案:利用部分類(PartialClass)的輔助機制來實現(xiàn)對EntityFramework生成類(也就是應(yīng)用于系統(tǒng)的各Model類)的擴充;通過Metadata來實現(xiàn)對Model進行再定義;6.4擴充基于EntityFramework的數(shù)據(jù)模型ASP.NETMVC程序開發(fā)第

21頁示例:應(yīng)用partial擴展原有Model6.4擴充基于EntityFramework的數(shù)據(jù)模型ASP.NETMVC程序開發(fā)第

22頁示例:定義Model的Metadata本章小結(jié)

ASP.NETMVC程序開發(fā)第

23頁

本章內(nèi)容主要是展示如果實現(xiàn)對進行數(shù)據(jù)進行驗證的技術(shù),由于MVC中主要通過Model實現(xiàn)數(shù)據(jù)的傳遞,所以主要也就是對Model進行相應(yīng)的屬性有效性驗證。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論