0

Пример:Как получить валидаторы, реализующие API Fluentvalidation в ASP.Net WebAPI

public class UserValidator : AbstractValidator<UserViewModel> 
{ 
    public UserValidator() 
    { 
     RuleFor(p => p.Username).NotEmpty() 
      .WithMessage("Please enter a username."); 
    } 
} 

public class UserController : ApiController 
{ 
    public IHttpActionResult Create(UserViewModel vewModel) 
    { 
     if (ModelState.IsValid) 
     { 
      return Ok(); 
     } 

     return BadRequest(); 
    } 
} 

Просто, предоставляя UserController.Create() метод и UserViewModel объект, как вы можете получить объект UserValidator или тип?

+0

Вам нужно просто добавить FluentValidationModelValidatorProvider.Configure (GlobalConfiguration.Configuration); в файл Global.asax – cecilphillip

ответ

0

Вы можете сделать две вещи:

Либо вводить свой валидатор в конструкторе контроллера, например, так:

public class UserController : ApiController 
{ 
    private readonly IValidator<UserViewModel> userViewModelValidator; 

    public UserController(IValidator<UserViewModel> userViewModelValidator) 
    { 
     this.userViewModelValidator = userViewModelValidator; 
    } 
} 

, а затем в вашем методе, вызовите:

var validationResults = this.userViewModelValidator.Validate(vewModel); 

Вы также можете только новый:

public IHttpActionResult Create(UserViewModel vewModel) 
{ 
    var validator = new UserValidator(); 

    if (validator.validate(vewModel).IsValid) 
    { 
     return Ok(); 
    } 

    return BadRequest(); 
} 

В качестве альтернативы вы можете выполнить некоторую проверку на основе атрибутов, которая, вероятно, выравнивает больше с тем, что вы хотите.

public class UserViewModel 
{ 
    [Validator(typeof(UserValidator))] 
    public string UserName { get; set; } 
} 

Вы должны подключить его в корневой состав, который для Web.Api проектов является файл global.asax, в методе Application_Start().

protected void Application_Start() 
{ 
    // ..other stuff in here, leave as is 
    // configure FluentValidation model validator provider 
    FluentValidationModelValidatorProvider.Configure(GlobalConfiguration.Configuration); 
}