Как получить валидаторы, реализующие 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);
}
Другие вопросы по тегам