2017-01-06 4 views
0

Web APIプロジェクトでFluentValidation.WebApi 6.2.1.0を使用しています。 FluentValidationでenumを検証してカスタムメッセージを返す方法はありますか?FluentValidationでenumを検証する

私のコントローラのアクションは、私は、このような何かのためにlooing上記のコードでは

public class CheckUpdateVMValidator : AbstractValidator<CheckUpdateVM> 
{ 
    public CheckUpdateVMValidator() 
    { 
     RuleFor(x => x.Device).Must(x => Enum.IsDefined(typeof(DeviceTypes), x)).WithMessage("xxx"); 
    } 
} 

、モデルバインダーてる

[Validator(typeof(CheckUpdateVMValidator))] 
public class CheckUpdateVM 
{ 
    public DeviceTypes Device { get; set; } 
} 

public IHttpActionResult Get([FromUri]CheckUpdateVM info) 
{ 
    ... 
} 

私のモデルは、以下の通りであります"Device"パラメータの値とエラーのある応答を検証します。エラーメッセージをカスタマイズすることはできません。 (「デバイス」プロパティの種類を文字列に設定した場合、正常に動作します)

答えて

0

このシナリオでは、カスタムバリデータを作成する方が良いでしょう。

public class DeviceEnumValidator<T> : PropertyValidator { 

public DeviceEnumValidator() 
    : base("Invalid Enum value!") { } 

protected override bool IsValid(PropertyValidatorContext context) { 

    DeviceTypes enumVal= (DeviceTypes) Enum.Parse(typeof(DeviceTypes), context.PropertyValue); 

    if (!Enum.IsDefined(typeof(DeviceTypes), enumVal) 
     return false; 

    return true; 
} 
} 

DeviceEnumValidatorを使用するには、検証ルールを定義するときにSetValidatorを呼び出すことができます。

public CheckUpdateVMValidator() 
{ 
    RuleFor(x => x.Device).SetValidator(new DeviceEnumValidator<DeviceTypes>()); 
} 
関連する問題