2012-10-10 88 views
2

根據該鏈接,現在我們可以使用Request.Unvalidated訪問表單字段的原始值wihout觸發請求驗證(並看到可怕錯誤消息甲潛在危險的Request.Form ...)。不幸的是我無法得到它的工作。如何使用Request.Unvalidated與ASP.NET MVC 4?

的Web.config

<httpRuntime targetFramework="4.5" requestValidationMode="4.5" /> 

在視圖模型一個簡單的領域:

// [AllowHtml] - even I tried this, it still did not work :(
public string Description { get; set; } 

和控制器的動作:

[HttpPost] 
public ActionResult Edit([Bind(Prefix = "Edit")] EditModel model) 
{ 
    string s = Request.Unvalidated.Form["Edit.Description"]; 
} 

我仍然看到錯誤「有潛在危險的Request.Form ......「,爲什麼?試過谷歌,但沒有ASP.NET MVC的例子。

工具箱:我正在使用ASP.NET MVC 4項目,面向.NET 4.5和VS2012。

感謝,

UPDATE:使用AllowHtml與Description屬性固定我的問題,甚至不需要Request.Unvalidated。在@ webdeveloper的回答中,我仍然在評論下面的問題。

回答

8
+0

我的代碼有什麼問題嗎?編輯操作到達之前出現錯誤。 –

+0

@Tiendq它落在綁定上,'Unvalidated'的想法是你可以訪問具有'潛在危險的Request.Form'的字段,但是這裏有'Edit([Bind(Prefix =「Edit」)] EditModel model)'binder works沒有'未經驗證'。 – webdeveloper

+0

謝謝,我用HtmlAllow修復了它。但正如你所說,有沒有機會使用模型綁定和Request.Unvalidated? –

1

看起來您需要將請求驗證模式設置爲2.0,如webdeveloper的第一個鏈接中所述。試試這個:

<httpRuntime targetFramework="4.5" requestValidationMode="2.0" /> 
+0

這聽起來令人傷心,它似乎仍然是有效管理請求驗證的最佳解決方案。自從4.0以來,請求驗證一直是ASP.NET中的噩夢,因爲配置值是全局的,甚至Request.Unvalidated也沒有正確解決這個問題。 –

1

我知道這個問題已經得到了解決@webdeveloper。但是,有關requestValidationMode的更多信息。

例如:它可以是2.04.0

<httpRuntime targetFramework="4.5" requestValidationMode="2.0" /> 

<httpRuntime targetFramework="4.5" requestValidationMode="4.0" /> 

這個請求驗證只對網頁上啓用。以下內容爲從MSDN

  • 4.0(默認值)的基準。 HttpRequest對象在內部設置一個標誌,該標誌指示在訪問任何HTTP請求數據時應該觸發請求驗證。這可以保證在請求期間訪問諸如cookie和URL之類的數據之前觸發請求驗證。忽略配置文件中頁面元素(如果有)或單個頁面中的@ Page指令的請求驗證設置。

  • 2.0僅對頁面啓用請求驗證,而不是對所有HTTP請求啓用請求驗證。此外,配置文件中頁面元素(如果有)的請求驗證設置或單個頁面中的@ Page指令的請求驗證設置用於確定要驗證哪些頁面請求。

您分配給該屬性的值不是有效的匹配ASP.NET的特定版本。任何小於4.0的數值(例如3.7,2.9或2.0)都被解釋爲2.0。任何大於4.0的數字都被解釋爲4.0。

因此,定義requestValidationMode="4.5"最初將被解釋爲requestValidationMode="4.0"