2013-05-16 88 views
15

requestValidationMode =「4.5」和requestValidationMode =「2.0」之間有區別嗎?我有一個.NET 4.5的應用程序,有我不想驗證,因爲用戶可以在輸入HTML標記控制:requestValidationMode 4.5 vs 2.0

<asp:TextBox ID="txtTitle" runat="server" ValidateRequestMode="Disabled" /> 
在我的web.config

我有:

<compilation debug="true" strict="false" explicit="true" targetFramework="4.5">...</compilation> 
<httpRuntime targetFramework="4.5" requestValidationMode="2.0" /> 

最初我已經把requestValidationMode =「4.5」,但沒有奏效,我仍然會得到關於標籤的錯誤 - 「從客戶端檢測到潛在危險的Request.Form值...」形成。但是,如果我將它設置爲requestValidationMode =「2.0」,它可以工作,我可以擊中PageLoad並對該字段的值進行編碼。

回答

17

是的,兩者之間有區別。任何指定爲4.0或更高版本的requestValidationMode都將使用4.0方式,並且在4.0中指定的任何requestValidationMode都將使用2.0方式。下面是兩者的描述:

http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.requestvalidationmode.aspx

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

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

注意:還有其他解決方案,因爲您使用的是asp.net 4.5,您可能希望將其視爲在每個控件級別進行驗證,這樣您可以將web.config中的requestValidationMode屬性保留爲4.5並只在需要它的控件上進行更改。 http://msdn.microsoft.com/en-us/library/system.web.ui.control.validaterequestmode.aspx

+1

我相信這是我遇到,我使用.NET 4.5,我已經初步確定在webconfig入門到requestValidationMode =「4.5」,並有ValidateRequestMode只在控制級別設置的問題,只是一個控件需要它,但它不起作用。將其更改爲requestValidationMode =「2.0」並且它可以工作。 – Paritosh

+0

最後不是非常有幫助。我有一個文本框,我想允許任何內容。我用它從每行的開頭解析出幾個部分。什麼都不會回報。是一個皮塔如何避免設置所有驗證2 ... – Lucas

8

我同意Chris_dotnet的回答。

不過,我想補充一個小方注:位置標籤下

在web.config文件中,附上requestValidationMode="2.0"標籤,所以你只允許特定的頁面有這樣的「豁免」跳過驗證。

<location path="YourPage.aspx"> 
    <system.web> 
    <httpRuntime requestValidationMode="2.0"/> 
    </system.web> 
</location> 
相關問題