FluentValidation 是一个用于 .NET 的验证库,它允许开发者通过声明式方式定义验证规则。在控制器中使用 ValidationContext
进行测试可以帮助你确保验证逻辑按预期工作。
ValidationContext
是 FluentValidation 库中的一个类,它提供了一个上下文对象,用于执行验证规则。这个上下文包含了要验证的对象以及任何额外的数据,如属性名称、验证选项等。
FluentValidation 提供了几种验证器类型:
在 ASP.NET Core 控制器中使用 FluentValidation 进行数据验证的场景非常常见,例如在处理用户注册、更新信息等请求时。
假设你有一个简单的模型和一个对应的验证器:
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}
public class UserValidator : AbstractValidator<User>
{
public UserValidator()
{
RuleFor(user => user.Name).NotEmpty();
RuleFor(user => user.Age).InclusiveBetween(18, 99);
}
}
在控制器中,你可以这样使用 ValidationContext
进行验证:
[ApiController]
[Route("[controller]")]
public class UsersController : ControllerBase
{
private readonly UserValidator _validator;
public UsersController(UserValidator validator)
{
_validator = validator;
}
[HttpPost]
public IActionResult Post([FromBody] User user)
{
var context = new ValidationContext<User>(user);
var result = _validator.Validate(context);
if (!result.IsValid)
{
var errors = result.Errors.Select(e => e.ErrorMessage).ToArray();
return BadRequest(errors);
}
// 处理有效的用户数据
return Ok();
}
}
如果你在测试 ValidationContext
时遇到问题,例如验证不按预期工作,可能的原因包括:
以下是一个完整的示例,展示了如何在 ASP.NET Core 控制器中使用 FluentValidation 进行验证:
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}
public class UserValidator : AbstractValidator<User>
{
public UserValidator()
{
RuleFor(user => user.Name).NotEmpty();
RuleFor(user => user.Age).InclusiveBetween(18, 99);
}
}
[ApiController]
[Route("[controller]")]
public class UsersController : ControllerBase
{
private readonly UserValidator _validator;
public UsersController(UserValidator validator)
{
_validator = validator;
}
[HttpPost]
public IActionResult Post([FromBody] User user)
{
var context = new ValidationContext<User>(user);
var result = _validator.Validate(context);
if (!result.IsValid)
{
var errors = result.Errors.Select(e => e.ErrorMessage).ToArray();
return BadRequest(errors);
}
// 处理有效的用户数据
return Ok();
}
}
通过以上步骤和示例代码,你应该能够在控制器中成功使用 ValidationContext
进行 FluentValidation 测试。
领取专属 10元无门槛券
手把手带您无忧上云