Net MVC 模型參數驗證

1. 添加引用:

System.ComponentModel.DataAnnotations.dll

2. 拿登陸驗證參數爲例:創建模型LoginUser; 

1)在需要驗證的字段上邊添加特性,如

[Required(ErrorMessage ="用戶名不允許爲空")]

2)繼承IValidatableObject 是爲了重寫Validate,實現在某種條件下觸發驗證code不爲空。

public class LoginUser : IValidatableObject
    {
        [Required(ErrorMessage ="用戶名不允許爲空")]
        public string username { get; set; }

        [Required(ErrorMessage ="密碼不允許爲空")]
        [StringLength(10, ErrorMessage = "字符長度過長")]
        public string password { get; set; }

        public string code { get; set; }

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            LoginUser userModel = validationContext.ObjectInstance as LoginUser;
            if (userModel==null)
            {
                yield break;
            }
            bool isValidCode= true;
            if (isValidCode && string.IsNullOrWhiteSpace(code))
            {
                yield return new ValidationResult("驗證碼不允許爲空", new string[] { code });
            }
        }
    }

3. 接下來就是驗證;

1)增加輔助驗證類

public static  class ValidatetionHelper
    {
        public static ValidResult IsValid(object value)
        {
            ValidResult result = new ValidResult();
            try
            {
                var validationContext = new ValidationContext(value);
                var results = new List<ValidationResult>();
                var isValid = Validator.TryValidateObject(value, validationContext, results, true);

                if (!isValid)
                {
                    result.IsVaild = false;
                    result.ErrorMembers = new List<ErrorMember>();
                    foreach (var item in results)
                    {
                        result.ErrorMembers.Add(new ErrorMember()
                        {
                            ErrorMessage = item.ErrorMessage,
                            ErrorMemberName = item.MemberNames.FirstOrDefault()
                        });
                    }
                }
                else
                {
                    result.IsVaild = true;
                }
            }
            catch (Exception ex)
            {
                result.IsVaild = false;
                result.ErrorMembers = new List<ErrorMember>();
                result.ErrorMembers.Add(new ErrorMember()
                {
                    ErrorMessage = ex.Message,
                    ErrorMemberName = "Internal error"
                });
            }

            return result;
        }
        public class ValidResult
        {
            public List<ErrorMember> ErrorMembers { get; set; }
            public bool IsVaild { get; set; }
        }

        public class ErrorMember
        {
            public string ErrorMessage { get; set; }
            public string ErrorMemberName { get; set; }
        }
    }

2)使用驗證類進行驗證

public ActionResult Login(LoginUser user)
        {
            //驗證參數
            var result = ValidatetionHelper.IsValid(user);
            if (!result.IsVaild)
            {
                return JsonMsg(false, result.ErrorMembers.FirstOrDefault().ErrorMessage);
            }

            //驗證登陸
            //...

        }

到此,驗證參數如何使用已經演示完畢!除了不爲空還有其他的特性可以查閱資料或自己重寫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章