网络时代,对客户端传来的数据_数据校验是很必要的
文件结构图
以下是TestModel.cs 里面的代码《Model》
using luofenming.com.Common; namespace luofenming.com.Model { public class TestModel { public int ID { get; set; } [LenghtAttribute(5,15)] public string Name { get; set; } public long QQ { get; set; } [EmailAttribute] public string Email { get; set; } } }
以下是LenghtAttribute.cs里面的代码 《校验特性字符长度》
namespace luofenming.com.Common { public class LenghtAttribute : BaseAttribute { private int _minLenght = 0; private int _maxLenght = 0; public LenghtAttribute(int minLenght,int maxLenght) { this._minLenght = minLenght; this._maxLenght = maxLenght; } public override bool Validate(object oValue) { if (oValue != null) { return oValue.ToString().Length >= _minLenght && oValue.ToString().Length <= _maxLenght; } else { if (_minLenght > 0) { return false; } } return true; } } }
以下是EmailAttribute.cs里面的代码《校验邮箱特性 》
using System.Text.RegularExpressions; namespace luofenming.com.Common { public class EmailAttribute : BaseAttribute { public override bool Validate(object oValue) { if (oValue != null) { Regex r = new Regex("^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@(\\w+\\.)+\\w{2,5})\\s*$"); return r.IsMatch(oValue.ToString()); } return true; } } }
以下是BaseAttribute.cs里面的代码《校验特性基类》
namespace luofenming.com.Common { public abstract class BaseAttribute:Attribute { public abstract bool Validate(object oValue); } }
以下是AttributeExtend.cs里面的代码
using System; using System.Reflection; namespace luofenming.com.Common { public static class AttributeExtend { public static bool Validate<T>(T t) { Type type = t.GetType(); foreach (PropertyInfo prop in type.GetProperties())//pr { if (prop.IsDefined(typeof(BaseAttribute), true)) { object oValue = prop.GetValue(t, null); foreach (BaseAttribute iTemp in prop.GetCustomAttributes(typeof(BaseAttribute), true))//获取字段所有的特性 { if (!iTemp.Validate(oValue)) { return false; } } } } return true; } } }
以下是调用校验方法
private void button1_Click(object sender, EventArgs e) { TestModel model = new TestModel() { ID = 10000, Name = "罗分明是谁", QQ = 78630559, Email = "123@luofenming.com" }; bool b = AttributeExtend.Validate<TestModel>(model); }