请求的校验

RuleFor(x => x.Property).Must(property =>
{
  // 自定义验证逻辑
  return property == "有效值";//里面是一个委托
});

//复杂的用方法组,简单的用lambda(会自动缓存)

示例一:

RuleFor(p => p.Age).Must(age => age >= 18);

示例二:

RuleFor(r => r.EndDate)
.Must((reservation, endDate) => endDate > reservation.StartDate)
.WithMessage("结束日期必须晚于开始日期");

示例三:

RuleFor(u => u.Username)
.MustAsync(async (username, cancellation) =>
await _userService.IsUsernameAvailableAsync(username))
.WithMessage("用户名已被占用");

public class OrderValidator : AbstractValidator<Order>
{
    public OrderValidator()
    {
        RuleFor...
    }
}

//把上面的校验服务注册,之后会自动校验
builder.Services.AddControllers()
    .AddFluentValidation(fv => 
    {
        fv.RegisterValidatorsFromAssemblyContaining<PersonValidator>();
        // 或者使用以下方式注册所有验证器
        // fv.RegisterValidatorsFromAssembly(Assembly.GetExecutingAssembly());
     //fv.AutomaticValidationEnabled = false;//自动触发改手动触发
});
//第二种写法
builder.Services.AddControllers()
    .AddFluentValidation(fv => 
    {
        fv.RegisterValidatorsFromAssemblyContaining<PersonValidator>();
        // 或者使用以下方式注册所有验证器
        // fv.RegisterValidatorsFromAssembly(Assembly.GetExecutingAssembly());
    });

 

[HttpPost]//手动校验
public async Task<IActionResult> Create(
    [FromBody] Person person,
    [FromServices] IValidator<Person> validator)
{
    var validationResult = await validator.ValidateAsync(person);
    
    if (!validationResult.IsValid)
    {
        validationResult.AddToModelState(ModelState);
        return BadRequest(ModelState);
    }
    
    // 处理有效数据...
    return Ok();
}

  

posted @ 2025-04-23 22:36  爱晒太阳的懒猫。。  阅读(18)  评论(0)    收藏  举报