requestValidationMode 4.5 vs 2.0

时间:2013-05-16 14:22:29

标签: asp.net asp.net-4.5

requestValidationMode =“4.5”和requestValidationMode =“2.0”之间有区别吗?我有一个.net 4.5应用程序,有一个我不想验证的控件,因为用户可以输入html标签:

<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并对该字段中的值进行编码。

2 个答案:

答案 0 :(得分:21)

是的,两者之间存在差异。任何requestValidationMode指定为4.0或更高版本将使用4.0方式,任何requestValidationMode指定如下4.0将使用2.0方式。以下是两者的描述:

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

4.0(默认值)。 HttpRequest对象在内部设置一个标志,指示每当访问任何HTTP请求数据时都应触发请求验证。这保证了在请求期间访问诸如cookie和URL之类的数据之前触发请求验证。配置文件中的pages元素(如果有)或单个页面中的@ Page指令的请求验证设置将被忽略。

2.0。仅对页面启用请求验证,而不是对所有HTTP请求启用。此外,配置文件中的pages元素(如果有)或单个页面中的@ Page指令的请求验证设置用于确定要验证的页面请求。

作为注释:还有其他解决方案,因为您使用的是asp.net 4.5,您可能希望在每个控件级别上进行验证,这样您就可以将requestValidationMode属性保留在web.config中4.5和只在需要它的控件上更改它。 http://msdn.microsoft.com/en-us/library/system.web.ui.control.validaterequestmode.aspx

答案 1 :(得分:16)

我同意Chris_dotnet的回答。

但是,我想补充一点注意事项:

在您的web.config文件中,将requestValidationMode="2.0"标记括在位置标记下,这样您只允许特定页面拥有此标记&#34; waiver&#34;跳过验证。

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