2013-05-16 69 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> 
相关问题