[英]How do you get the validators implementing the Fluentvalidation API in ASP.Net WebAPI
Example: 例:
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();
}
}
Just by providing the UserController.Create() method and UserViewModel object, how can you get the UserValidator object or type? 仅通过提供UserController.Create()方法和UserViewModel对象,如何获得UserValidator对象或类型?
You can do two things: 您可以做两件事:
Either inject your validator into the constructor of your controller, like so: 将验证器注入到控制器的构造函数中,如下所示:
public class UserController : ApiController
{
private readonly IValidator<UserViewModel> userViewModelValidator;
public UserController(IValidator<UserViewModel> userViewModelValidator)
{
this.userViewModelValidator = userViewModelValidator;
}
}
And then in your method, call: 然后在您的方法中,调用:
var validationResults = this.userViewModelValidator.Validate(vewModel);
You can also just new one up: 您还可以将其重新升级:
public IHttpActionResult Create(UserViewModel vewModel)
{
var validator = new UserValidator();
if (validator.validate(vewModel).IsValid)
{
return Ok();
}
return BadRequest();
}
Alternatively, there is some attribute based validation you can do, which probably aligns more with what you want. 另外,您可以执行一些基于属性的验证,这可能与您想要的内容更加一致。
public class UserViewModel
{
[Validator(typeof(UserValidator))]
public string UserName { get; set; }
}
You will have to wire it up in your composition root, which for Web.Api projects is your global.asax file, in your Application_Start()
method. 您必须将其连接到您的合成根目录中,对于Web.Api项目,该根目录是
Application_Start()
方法中的global.asax文件。
protected void Application_Start()
{
// ..other stuff in here, leave as is
// configure FluentValidation model validator provider
FluentValidationModelValidatorProvider.Configure(GlobalConfiguration.Configuration);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.