不知道大家之前有没有注意到这个属性这里我们来一起讨论一下这个属性的作用以及我们以后到底该怎样使用它!
我们先来了解一下这个属性:(注:本属性 中是新增的!)
它所在的命名空间:SystemWebConfiguration
程序集:SystemWeb(在 systemwebdll 中)
所在的类:pagesSection
上面我大体了解了一下这个属性下面我们在具体的分析一下该属性这个属性是用来验证客户端用户的输入的用来验证用户的输入中是否有危险字符的这个属性的默认值为true微软之所以这么做是为了提高程序的安全性所以很多程序员即使不知道怎么来防御黑客的攻击的一些默认属性等内容已经对安全进行了控制这也是为什么的程序相对来说比较安全的原因!
既然这个属性的默认值为true而且页面的回发又很频繁那么如果没有用户的交互的地方这样 岂不是每次都要去严整呢这样也是有可能会来回的损耗系统的执行时间的至于:如果没有客户端的交互的话到底会不会去验证这是微软的工程师的问题了对于我们来说如果没有客户端交互的地方我感觉是应该将此属性设置为 false的这样的话无论 微软的工程师怎样设计对我们程序的本身是没有任何影响的!
但是当需要跟用户交互的地方我们就要用它的默认值了可是事情可能并没有我们想象的那么简单也没有那么完美当用户在使用一些html编辑器的时候自己本身提交的字符里就有等这样的字符这样就要求程序员必须要关闭validaterequest 属性这个时候我们又该怎样的来控制页面的安全性能呢?
当然了这个地方我们可以来对一切危险字符进行过滤这样可能提高一些安全性但是我们防止用户的输入可能考虑的会有遗漏这样就导致了安全还会是有问题的我们可以反过来考虑我们到底需要提交多少特殊字符然后对我们提交的特殊字符进行转义或替换这样我们就又可以将validaterequest的属性设置为true了这样既解决了程序的安全问题又满足了我们的需求!
有时候在与用户进行交互的时候用户难免的会有输入特殊字符的时候因为我们设置的validaterequest 的值 为true所以页面会不给任何提示的前提下 直接输出一大页的错误信息 这样可能就导致了用户的误解他们可能认为是我们网站出了问题用户不可能会想到他输入了非法的字符!
对于这种情况我们又该怎么办呢?
幸好微软的工程师们在page里又给出了一个Page_Error的处理事件这样我们就可以用它来进行异常的捕获了
代码如下:
protected void Page_Error(object sender EventArgs e)
{
Exception ex = ServerGetLastError();
if (ex is HttpRequestValidationException)
{
ResponseWrite(您输入的字符中有非法字符!);
ServerClearError();
}
}a