您的位置:首页 > Web前端

Effective C# Item39 : 使用.NET验证

2010-02-21 23:53 375 查看
软件开发过程中,安全始终是一个非常重要的话题,如何能保证恶意数据数据不会进入到数据库中,如何使得软件“水火不侵”,经常会成为折磨开发人员的噩梦。保证程序安全的一个重要手段就是对软件的入力数据进行检查,入力数据可能来自于用户直接的手动入力,也可能来自于外部的其他模块,我们需要在业务逻辑执行之前,对数据进行检查,保证只有“正确”的数据才能执行业务逻辑。

有时执行这种检查是很繁琐的,.NET为我们提供了一些验证机制。针对桌面应用程序和Web应用程序,.NET为我们提供了不同的方式来对数据进行验证。

针对桌面应用程序,针对需要进行验证的控件,我们需要为其注册Validating事件,在该事件中,编写数据检查的逻辑,同时还需要将控件的CauseValidation属性设置为true,否则,是不会触发Validating事件的。

我们来看下面的代码。

Aspx 控件验证

/// <summary>
/// test aspx page validation.
/// </summary>
private static void AspxValidateTest()
{
Page pgTest = new Page();
System.Web.UI.WebControls.TextBox txtName = new System.Web.UI.WebControls.TextBox();
txtName.ID = "txtName";
pgTest.Controls.Add(txtName);
//RequiredFieldValidator
Console.WriteLine("RequiredValidator:");
System.Web.UI.WebControls.RequiredFieldValidator requiredValidator = new System.Web.UI.WebControls.RequiredFieldValidator();
requiredValidator.ID = "requiredValidator";
requiredValidator.ControlToValidate = txtName.ID;
requiredValidator.ErrorMessage = "Required input!";
pgTest.Controls.Add(requiredValidator);
txtName.Text = string.Empty;
Validate(requiredValidator);
txtName.Text = "aaa";
Validate(requiredValidator);

Console.WriteLine();

//RangedValidator
Console.WriteLine("RangeValidator");
System.Web.UI.WebControls.RangeValidator rangeValidator = new System.Web.UI.WebControls.RangeValidator();
rangeValidator.ID = "rangeValidator";
rangeValidator.ControlToValidate = txtName.ID;
rangeValidator.MinimumValue = "a";
rangeValidator.MaximumValue = "z";
rangeValidator.Type = System.Web.UI.WebControls.ValidationDataType.String;
rangeValidator.ErrorMessage = "Out of Range !";
pgTest.Controls.Add(rangeValidator);
txtName.Text = "!@#";
Validate(rangeValidator);
txtName.Text = "a";
Validate(rangeValidator);

Console.WriteLine();

//CompareValidator
Console.WriteLine("CompareValidator:");
System.Web.UI.WebControls.TextBox txtMin = new System.Web.UI.WebControls.TextBox();
txtMin.ID = "txtMin";
System.Web.UI.WebControls.TextBox txtMax = new System.Web.UI.WebControls.TextBox();
txtMax.ID = "txtMax";
pgTest.Controls.Add(txtMax);
pgTest.Controls.Add(txtMin);
System.Web.UI.WebControls.CompareValidator compareValidator = new System.Web.UI.WebControls.CompareValidator();
compareValidator.ID = "compareValidator";
compareValidator.ControlToValidate = txtMin.ID;
compareValidator.ControlToCompare = txtMax.ID;
compareValidator.Operator = System.Web.UI.WebControls.ValidationCompareOperator.LessThan;
compareValidator.ErrorMessage = "Compare Fail !";
pgTest.Controls.Add(compareValidator);
txtMin.Text = "b";
txtMax.Text = "a";
Validate(compareValidator);
txtMax.Text = "c";
Validate(compareValidator);
}

/// <summary>
/// validate with validator.
/// </summary>
/// <param name="validator"></param>
private static void Validate(System.Web.UI.WebControls.BaseValidator validator)
{
if (validator == null)
{
return;
}
validator.Validate();
if (!validator.IsValid)
{
Console.WriteLine(validator.ErrorMessage);
}
else
{
Console.WriteLine("Your Input is Valid!");
}
}


上述代码,针对四种类型的Validator,都列出了两种情况,第一种情况是验证不通过,第二种情况是验证通过。执行结果如下。






通过上面的介绍,我们应该对.NET中的验证机制有一个大致的了解了,当然,上述提供的代码只是出于说明示范作用,在真实的环境中,情况要更加复杂多变,我们还需要见招拆招,具体问题具体分析。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: