Nous créons l'attribut personnalisé "SpecificDateAttribute" pour les propriétés de calss. Comment pouvons-nous forcer tous les DTO qui ont une propriété avec cet attribut, valider la méthode ICustomValidate?Ajouter un mécanisme de validation personnalisé à abpBoilerplate dtos?
0
A
Répondre
0
Je crée la classe de base pour DTO comme ceci:
public class AzmaBaseDto: ICustomValidate
{
public virtual void AddAzmValidationErrors(CustomValidationContext context)
{
}
public void AddValidationErrors(CustomValidationContext context)
{
var properties = this.GetType()
.GetProperties();
foreach (var a in properties.Where(p => p.IsDefined(typeof(ShamsiDateAttribute), false)))
{
#region
var v = a.GetValue(this);
if (v == null || DateTimeConvert.IsValidShamsiDate(v.ToString()) == false)
{
string _name = a.Name;
if (a.IsDefined(typeof(DisplayAttribute), false))
{
var ca = (DisplayAttribute)a.GetCustomAttributes(typeof(DisplayAttribute), false).FirstOrDefault();
if (ca.Name.IsNullOrEmpty() == false)
_name = ca.Name;
}
context.Results.Add(new ValidationResult("Property value [" + _name + "] is not valid"));
}
#endregion
}
AddAzmValidationErrors(context);
}
}
et DTO forme elle héritent. comme ceci
public class UpsertAccountingDocumentInput : AzmaBaseDto
{
[ShamsiDate]
public string Date { get; set; }
public bool? SaveAsMemo { get; set; }
public override void AddAzmValidationErrors(CustomValidationContext context)
{
if(SaveAsMemo==false && Date.IsNullOrEmpty()==false)
{
context.Results.Add(new ValidationResult("Put some error info"));
}
base.AddAzmValidationErrors(context);
}
}
Je pense que cela peut être l'une des bonnes réponses.
+0
Je pense que cela fonctionne. Mon doute était sur la façon dont vous avez fait votre question: à partir de vous répondre à ma sous-estimation maintenant, vous voulez être sûr que tous les DTO dérivées exécutent vos AddValidationErrors de base et appellent vos AddAzmValidationErrors spécifiques. Si oui, cela fonctionne –
caisse suivant urls https://aspnetboilerplate.com/Pages/Documents/Validating-Data-Transfer-Objects#DocCustomValidation https://forum.aspnetboilerplate.com/viewtopic.php?f=2&t=2819 –
@AlperEbicoglu. Oui, nous pouvons implémenter l'interface ICustomValidate, mais dois-je l'implémenter séparément pour chaque Dtos? Puis-je l'implémenter une fois pour tous les Dtos? –
Vous me manquez pourquoi vous avez besoin. S'il vous plaît, postez du code –