0
我們爲calss屬性創建自定義屬性「SpecificDateAttribute」。我們如何強制所有具有此屬性屬性的DTO,驗證ICustomValidate方法?將自定義驗證機制添加到abpBoilerplate dtos?
我們爲calss屬性創建自定義屬性「SpecificDateAttribute」。我們如何強制所有具有此屬性屬性的DTO,驗證ICustomValidate方法?將自定義驗證機制添加到abpBoilerplate dtos?
我創建這樣的DTO的基類:
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);
}
}
和繼承的DTO形成了。像這樣
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);
}
}
我認爲這可以是正確答案之一。
我認爲它的工作原理。 我的疑問是關於你如何做你的問題:現在你回答我的低調是你想確保所有派生的DTO運行你的基本AddValidationErrors,並且他們調用你的特定的AddAzmValidationErrors。如果是這樣,它的工作 –
結賬以下網址 https://aspnetboilerplate.com/Pages/Documents/Validating-Data-Transfer-Objects#DocCustomValidation https://forum.aspnetboilerplate.com/viewtopic.php?f=2&t=2819 –
@AlperEbicoglu。是的,我們可以實現接口ICustomValidate,但我應該分別爲每個Dtos實現它嗎?我可以爲所有Dtos實施一次嗎? –
我想你爲什麼需要。請發帖一些代碼 –