如何对用户输入的数据进行验证
为了保证用户输入系统的数据是有效的,同时也是为了避免程序出现不可预期的问题,保证应用程序能够安全的运行,所以对输入的数据进行验证是非常有必要的。
刚开始学代码的时候,我是这样进行数据校验的
看上去是不是很丑陋...,表单数据多的时候往往能写上几百上千行的if判断语句。并且每个需要保存更新数据的地方都需要编写这样的验证代码...
后来,稍微学会点了偷懒的技巧,把数据的验证放到了对象里,这样客户端每次只需要调用验证方法就可以对数据进行验证。
public IEnumerable<Tuple<bool, string>> Validate()
{
if (string.IsNullOrEmpty(Name))
{
yield return new Tuple<bool, string>(false, "客户姓名不允许为空!");
}
if (Age > 0 && Age <= 120)
{
yield return new Tuple<bool, string>(false, "年龄的有效范围是1~120岁!");
}
if (string.IsNullOrEmpty(Phone))
{
yield return new Tuple<bool, string>(false, "电话号码不允许为空!");
}
//... 以下还有一百行代码
}
// 客户端调用代码
foreach (var item in custom.Validate())
{
if (!item.Item1)
{
Console.WriteLine(item.Item2);
return;
}
}
再后来,看到了别人通过给对象成员添加校验特性,在提交数据时通过反射获取对象成员声明的特性进行校验,进一步简化了代码。你可以自己去定义数据验证的相关验证特性类和验证处理的代码,但作为一个懒人,我通过使用.NET提供的System.ComponentModel.DataAnnotations.dll库中的校验特性和验证处理类就可以很简单的实现数据的校验。如果你之前写过ASP.NET MVC相关的代码,应该对他比较熟悉
public class Custom
{
[Required]
public string Name { get; set; }
[Required]
[Range(0, 2)]
public int Sex { get; set; }
[Required]
[MaxLength(11)]
public string Phone { get; set; }
[Required]
[Range(1, 120, ErrorMessage = "年龄选择范围1~120岁")]
public int Age { get; set; }
//... 以下还有一百行代码
}
关于更多的System.ComponentModel.DataAnnotations资料https://docs.microsoft.com/zh-cn/dotnet/api/system.componentmodel.dataannotations?view=net-6.0