using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Reflection; using System.Threading.Tasks; namespace AMESCoreStudio.WebApi.Models.BAS { public class TimeAttribute : ValidationAttribute { //private int _price; //private string _isDisable; //private string _parentName; //private string _displayName; public TimeAttribute()//建構整定義了attribute可以丟進來的參數 { //_price = price; //_isDisable = isDisable; //_parentName = parentName; } /// <summary> /// 使用propertyinfo的方式,來把字串解析出真實的值 /// </summary> /// <param name="validationContext"></param> /// <param name="field"></param> /// <returns></returns> private object GetRealValue(ValidationContext validationContext, string field) { PropertyInfo isDisableInfo = validationContext.ObjectType.GetProperty(field); return isDisableInfo.GetValue(validationContext.ObjectInstance, null); } private string GetErrorMessage { get { return $"時間格是不正確"; } } /// <summary> /// 主要邏輯驗證區 /// </summary> /// <param name="value">屬性傳進來的值</param> /// <param name="validationContext">用此物件可以反解析字串的值,而取得真實的value</param> /// <returns></returns> protected override ValidationResult IsValid(object value, ValidationContext validationContext) { //bool isDisable = (bool)GetRealValue(validationContext, _isDisable); //_displayName = GetRealValue(validationContext, _parentName).ToString(); //if (!isDisable) //{ // int inputValue = (int)value; // if (inputValue < _price) // { // return new ValidationResult(GetErrorMessage); // } //} //return ValidationResult.Success; string inputValue = (string)value; if (IsDate(inputValue)) return ValidationResult.Success; else return new ValidationResult(GetErrorMessage); } bool IsDate(string strDate) { try { DateTime.Parse(strDate); return true; } catch { return false; } } /// <summary> /// 覆寫官方的預設方法,只是要告知回傳的預設errormessage /// </summary> /// <param name="name"></param> /// <returns></returns> public override string FormatErrorMessage(string name) { if (string.IsNullOrEmpty(name)) { return GetErrorMessage; } return name; } } }