如何对用户输入的数据进行验证

为了保证用户输入系统的数据是有效的,同时也是为了避免程序出现不可预期的问题,保证应用程序能够安全的运行,所以对输入的数据进行验证是非常有必要的。
刚开始学代码的时候,我是这样进行数据校验的

看上去是不是很丑陋...,表单数据多的时候往往能写上几百上千行的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

posted @ 2022-03-25 11:02  壮哈苗  阅读(677)  评论(0编辑  收藏  举报