2011-10-12 30 views
14

我們剛剛升級到ASP.NET 4.0,發現requestValidation不再有效。 MSDN文檔表明,我們需要在web.config中設置requestValidationMode到2.0:如何在不將RequestValidationMode設置爲2.0的情況下禁用請求驗證?

  • 4.0(默認值)。 HttpRequest對象在內部設置一個標誌,該標誌指示只要訪問任何HTTP請求數據就應該觸發請求驗證。這保證了請求 驗證在請求期間訪問數據(例如cookie和URL)爲 之前被觸發。單個頁面中配置文件或配置文件中 頁面元素(如果有)的請求驗證設置將被忽略。
  • 2.0。請求驗證僅針對頁面啓用,而不針對所有HTTP請求。另外,配置文件中的頁面 元素(如果有)的請求驗證設置或單個頁面中的@ Page指令 的請求驗證設置用於確定哪些頁面請求驗證爲 。

這會對我們有用,但是我有點困惑。看來,我們正在將其轉換爲傳統/兼容模式。當然,應該可以擁有4.0的行爲,但仍然可以選擇在頁面上關閉此功能?

回答

-3

您可以設置ValidateRequest以虛假的頁面指令:

<%@ Page ValidateRequest="false" %> 
+3

他明顯知道。你讀過這個問題了嗎? – Stilgar

+1

@James Johnson謝謝你正確地格式化我的答案(看起來像代碼而不是文本) –

+0

@Stilgar:在您質疑我之後明白了實際問題是什麼,謝謝:( –

2

看來,它是不可能在requestValidationMode 4.0開啓或關閉這一個頁面。

這個whitepaper概述了.NET 4.0的突破性變化,其中似乎是一個。即使白皮書建議恢復到requestValidationMode 2.0

要恢復到ASP.NET 2.0請求驗證功能的行爲,添加以下設置在Web.config文件:

<httpRuntime requestValidationMode="2.0" />

雖然它也有幫助推薦

您分析任何請求驗證錯誤以確定是否existin g處理程序,模塊或其他自定義代碼訪問可能不安全的HTTP輸入,這些輸入可能是XSS攻擊媒介。

沒有就如何更好地解決這些問題

4

最好的辦法是用自己的代碼覆蓋requestValidationType給予任何指導:

<httpRuntime requestValidationType="YourNamespace.YourValidator" />

MSDN鏈接

+3

似乎有點過度了:( –

+1

我不得不爲這個MVC應用程序使用這種技術。有一個需要接收HTML作爲參數的第三方控制器,其他答案無效。謝謝ScottRFrost。 –

26

我找到了一種方法來實現這一點,而無需將RequestValidationMode更改爲2。0到整個站點:

您可以爲要禁用請求驗證的頁面創建一個子目錄,並將此web.config添加到此目錄,並將RequestValidationMode設置爲2.0,這樣只有此目錄可以工作在2.0模式下,不會影響所有其他在4.0模式下工作的請求。

我認爲你可以添加一個位置部分到你的主web.config只指定一個頁面,但我沒有測試過。 事情是這樣的:

<location path="Admin/Translation.aspx"> 
    <system.web> 
     <httpRuntime requestValidationMode="2.0"/> 
    </system.web> 
</location> 

希望它可以幫助你的幫助我!

+5

Works perfect,thanks。我學到了一些東西:位置在下作爲兄弟添加到 。路徑屬性值不能以前綴/開頭。可以添加單個頁面或整個文件夾(不要使用尾隨/) – mellodev

相關問題