.NET 4.0
VS 2012
IIS 7
我有一个应用程序,它接收各种页面上的电子邮件地址,我发现用户直接复制/粘贴到几个输入中,它触发了标题中提到的错误,这是一个例子。
"blah blah" <blah@blah.com>
显然,括号正在触发问题。我意识到我可以简单地将验证切换到2.0,但我不希望这样做,所以这是我的问题。
有没有办法让运行时更好地做出反应?当遇到这种情况时,它不会抛出一个超级可怕的页面而是将其视为输入错误并向用户显示消息(在一般情况下)例如,在我所说的场景中,我可能会显示错误消息约&lt;和&gt;不允许使用电子邮件地址。我喜欢保护,但我不喜欢每次有人输入有潜在危险的输入时都会显示“oops”页面的想法。
如果我放松验证:
答案 0 :(得分:3)
您可以通过在页面标题中放置ValidateRequest =“false”来放宽每页的验证。
然后,您可以使用正则表达式验证电子邮件地址,如下所示:
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
ControlToValidate="Email" ErrorMessage="Enter a valid e-mail address"
ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" />
对于其他控件,您可以使用正则表达式“^ [^&lt;&gt;] + $”来检查尖括号。实际上,除非您将其输出到客户端(HTML / JavaScript),否则您不需要担心“潜在危险”的用户输入,或者您将其包含在SQL语句中。
或者,您可以尝试在页面中编写页面级错误处理程序或在Global.asax中编写应用程序级错误处理程序。
网页级错误处理:http://msdn.microsoft.com/en-us/library/ed577840(v=vs.100).aspx
应用程序级错误处理: http://msdn.microsoft.com/en-us/library/24395wz3(v=vs.100).aspx
此页面提供了有关在ASP.NET中禁用请求验证的一些有用信息: http://msdn.microsoft.com/en-us/library/hh882339(v=vs.100).aspx