2017-02-02 24 views
0

流暢な検証ルールを実装しました。私はjson形式で角度リクエストを介してコントローラのAPIエンドポイントにリクエストを送信しています。FluentValidationを一般的な方法でMVCコントローラのDIで使用する方法

私はデータとモデルのパラメータを受け取ったときに私は流暢な検証を使用して送られたデータを検証したいと思います。

[Route("")] 
    [HttpPost] 
    public async Task<IActionResult> Post([FromBody]TesViewModel request) 
     { 

        var validator = new TesViewModelValidator(); 
        var result = await validator.ValidateAsync(request); 

return Ok(); 

    } 

どのようにオブジェクトをインスタンス化してアクセスし、依存性注入を使用して一般的な方法で正しいリクエストを渡すことができますか?

+0

DI用にAutofacを使用していますか? – Amit

+0

私は構造マップを使用しています –

答えて

0

私は、IValidatorインスタンスを注入し、それを呼び出して終了しました。 var result = _validator.Validate(instance);ここでinstanceは登録されたAbstractValidatorのTです

0

基本抽象クラスを作成します。それは、拡張メソッドを作成した後

public abstract class BaseApiRequest 
{ 
} 

は、この抽象クラスで

public class YourModel : BaseApiRequest 
{ 

} 

をあなたのモデルを継承:今すぐ

public static bool IsValidApiRequest<T>(this T entity) 
     where T : BaseApiRequest 
    { 
     var attribute = (ValidatorAttribute)Attribute.GetCustomAttribute(typeof(T), typeof(ValidatorAttribute)); 
     if (attribute != null) 
     { 
      if (entity == null) 
       return false; 
      var validator = attribute.ValidatorType; 
      var instance = Activator.CreateInstance(validator); 
      MethodInfo method = instance.GetType().GetMethod("Validate", new[] { typeof(T) }); 
      object result = method.Invoke(instance, new object[] { entity }); 
      return (bool)result.GetType().GetProperty("IsValid").GetValue(result); ; 
     } 
     return true; 
    } 

を、あなたが検証することができますあなたのリクエスト:

if (!request.IsValidApiRequest()) 
      return BadRequest(); 
関連する問題