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并对该字段进行编码.
解决方法
是的,两者之间有区别.任何指定为4.0或以上的requestValidationMode将使用4.0的方式,并且任何requestValidationMode指定为4.0将使用2.0的方式.以下是对这两个的描述:
4.0(默认). HttpRequest对象内部设置一个标志,指示每当访问任何HTTP请求数据时都应触发请求验证.这保证在请求期间访问诸如Cookie和URL的数据之前触发请求验证.配置文件中的页面元素(如果有)的请求验证设置或单个页面中的@ Page指令的请求验证设置将被忽略.
2.0.请求验证仅对页面启用,而不是针对所有HTTP请求.此外,配置文件中的页面元素(如果有的话)的请求验证设置或单个页面中的@ Page指令的请求验证设置用于确定哪些页面请求进行验证.
注意:还有其他解决方案,因为您使用的是asp.net 4.5,您可能希望查看它在每个控件级别进行验证,这样可以将requestValidationMode属性保留在web.config中,并将其改为4.5对需要的控件.
http://msdn.microsoft.com/en-us/library/system.web.ui.control.validaterequestmode.aspx