Как получить валидаторы, реализующие 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?
1 ответ
Вы можете сделать две вещи:
Либо добавьте ваш валидатор в конструктор вашего контроллера, вот так:
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);
}