下面演示Asp.net4如何实现一个自定义验证类,对每个查询字符串验证.步骤如下:
1) 继承RequestValidator类,只需要重写IsValidRequestString方法,如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Util;
namespace WebApplication1
{
public class myRequestValidator:RequestValidator
{
protected override bool IsValidRequestString(HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, out int validationFailureIndex)
{
validationFailureIndex = -1;
if (requestValidationSource == RequestValidationSource.QueryString) //对查询字符串进行验证
{
if (value.Contains("<"))//检查是否包含<,当然也可以检查其他特殊符号,或者忽略某些特殊符号.
{
context.Response.Redirect("~/Error.aspx",true);//直接转到自定义的错误页面.
return false;
}
}
return base.IsValidRequestString(context, value, requestValidationSource, collectionKey, out validationFailureIndex);
}
}
}
2) 在web.config中设置请求验证类型为自定义的类型.如下:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime requestValidationType="WebApplication1.myRequestValidator" />
</system.web>
</configuration>
现在,我们通过修改url来提交带<特殊符号的页面时,将会被定向到自定义的错误页面,而不是默认错误提示.如下:

如下图所示,并没有出现默认的错误提示,而是到了我们自己提供一个错误页面。

最后,ASP.Net4为我们提供很多扩展点,可以很方便进行扩展,使得我们的应用程序更加灵活可控。