最近在作一個ASP.NET MVC項目的時候發現,有一個Controller的Action死活都無法接收到從客戶端提交過來的Html表單請求和數據,後來才發現是由於默認狀況下ASP.NET MVC在執行Controller的代碼前,會對客戶端提交到服務器的數據作安全性驗證,若是ASP.NET檢測到客戶端提交的數據中有危險數據(危險數據通常是一些關鍵字和關鍵符號),那麼就會中斷當前客戶端提交的請求而且引起一個異常,那麼客戶端提交的數據天然就不會進入到Controller和Action了。主要緣由是在該項目中有頁面使用了富文本編輯器,而用戶在富文本編輯器中輸入的文字其實是Html,因此當富文本編輯器的數據提交到服務器端後,ASP.NET認爲客戶端提交的數據中包含大量Html標籤是危險數據,請求直接就被終止了,而後拋出異常。其實這個問題不光在ASP.NET MVC中存在,在WebForm中也是有數據安全性驗證的,並且MVC和WebForm的數據安全性驗證是能夠經過設置來關閉的,詳情請接着往下看。緩存
後來才知道,原來在ASP.NET MVC中有一個叫ValidateInputAttribute的Filter能夠關閉數據安全性驗證,將其加到接收數據的Action上後,客戶端富文本編輯器的數據就能成功傳入Action了,以下所示傳入參數false就告訴ASP.NET不要對這個Action作數據安全性驗證。 安全
下面是對MVC系統自帶經常使用的幾個Filter的介紹,其中就有ValidateInputAttribute服務器
名稱 | 說明 |
OutputCacheAttribute | 相似於 Web Form中在 OutputCache 指令。 OutputCache 屬性容許在 MVC Framework 緩存控制器的輸出。 |
ValidateInputAttribute | 相似於 Web Form中 ValidateRequest 屬性。 MVC 框架默認將爲 檢查HTML 或其餘危險輸入傳入的 HTTP 請求。 若是檢測到,將引起異常。 使用此屬性能夠禁用請求驗證。mvc |
AuthorizeAttribute | Authorize 屬性,能夠對控制器操作的聲明性的受權檢查。 該屬性能夠限制特定角色中的用戶的操做。 當您建立只應該給管理員角色中的用戶的操做時,您可使用此屬性。默認使用的ASP.NET Membership服務,若是不使用ASP.NET 的Membership服務,能夠繼承AuthorizeAttribute,重寫實現。 |
ValidateAntiForgeryTokenAttribute | 此屬性是一個解決方案以幫助防止跨站點的請求攻擊 (CSRF)。 它容許驗證的 HTTP POST 爲特定於用戶的標記在 Framework。 有關詳細信息 CSRFs,請參閱" 使用 ASP.NET MVC AntiForgeryToken() 幫助器防止跨站點請求僞造 (CSFR)." |