2016-04-14 17 views
2

私はFluentValidationで入力値を検証しています。私は、値のベースで異なるエラーメッセージに対して-1、-2、-3の整数値を返すデータベースからの値を検証するメソッドを使用しています。メソッドからの戻り値に応じてエラーメッセージを表示する方法私はクラススコープ内の変数を作成し、戻り値を設定し、次の文で私は比較を試み、メッセージを表示しようとしましたが、私は次のステートメントが更新値の前に実行されることを観察します。FluentValidation 1つのプロパティの複数のエラーメッセージ

1つの入力値に対して異なるエラーメッセージを表示します。

たとえば、負の値のエラーメッセージは「負の値は許可されません」、 ユーザが大きい数値を入力した場合、メッセージは「数値が長すぎます」とする必要があります。

ここにコードISValidActionは、入力を検証し、このメソッドが常にtrueを返す変数returnvalueを設定するメソッドです。

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

私は解決策を得ました。 1つの値に対して複数のエラーを表示します。

私はちょうどこの機能を使用して検証のために呼び出すです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

関連する問題