2016-04-14 32 views
2

我使用FluentValidation驗證輸入值。我正在使用一種方法來驗證來自數據庫的值,該值根據值的不同而返回不同的錯誤消息的整數值-1,-2和-3。如何根據方法的返回值顯示錯誤消息。我在類作用域中創建了一個變量,並設置了返回值,在下一個語句中,我嘗試了比較並嘗試顯示消息,但是我觀察到在更新值之前執行了下一條語句。FluentValidation一個屬性的多個錯誤消息

我想爲一個輸入值顯示不同的錯誤消息。

例如用戶輸入一個負值錯誤信息應該是「負值不允許」, 如果用戶輸入一個大的數值,那麼信息應該是「數字太長」。

這裏是代碼ISValidAction是驗證輸入並設置變量returnvalue的方法,此方法始終返回true。

int returnvalue = 0; 
RuleFor(r => r.action).Must(ISValidAction).WithMessage("Action does not exist in the system.").When(r => !String.IsNullOrEmpty(r.action)); 

RuleFor(r => returnvalue).Must(r => !(returnvalue != 1 && returnvalue != -2 && returnvalue != -3)).WithMessage("");//for -1 
     RuleFor(r => returnvalue).Must(r => !(returnvalue != 1 && returnvalue != -1 && returnvalue != -3)).WithMessage("");//for -2 
     RuleFor(r => returnvalue).Must(r => !(returnvalue != 1 && returnvalue != -1 && returnvalue != -2)).WithMessage("");// for -3 

回答

6

我得到了解決方案!針對一個值顯示多個錯誤。

我剛纔添加的錯誤消息在PropertyValidatorContext

RuleFor(r => r.action).Must(ActionRateLimit).When(r => !String.IsNullOrEmpty(r.action)); 

這是呼籲使用功能驗證。

這裏是方法。

private bool ActionRateLimit(LogActionInput obj, string actionName, PropertyValidatorContext context) 
     { 
     int result = 0; 
     IRecognitionStoreService StoreService = new RecognitionStoreService(); 
     result = StoreService.ActionRateLimit(actionName, obj.userName);    
     if (result==1) 
     { 
      return true; 
     } 
     else if (result==0) 
     { 
      context.MessageFormatter.AppendArgument("ValidationMessage","Invalid action name or the user doesn't exists."); 
     } 
     else if(result==-1) 
     { 
      context.MessageFormatter.AppendArgument("ValidationMessage", "Action exceeds its rate limit. Please try again in a while."); 
     } 
     else if (result == -3) 
     { 
      context.MessageFormatter.AppendArgument("ValidationMessage", "This user has not completed the prequisite challenge. Action logging failed."); 
     } 
     return false; 

     } 

    } 

它工作正常。

+0

我不知道爲什麼我得到的錯誤:無法從'方法組'轉換爲'Func ' –

+0

在哪一點? –

+1

必須在Must()後添加.WithMessage(「{ValidationMessage}」)才能使其工作 – serg