添加用户接口传入一个类型为UserVo的对象作为参数,需要保证所添加用户的用户名、密码、手机号码、邮箱等格式正确。UserVo类型如下:
public class UserVo
{
public string UserName { get; set; }
public string Password { get; set; }
public string PhoneNumber { get; set; }
public string? Email { get; set; }
public string? Sexuality { get; set; }
public IList<string> Roles { get; set; }
}
1、使用Nuget引入FluentValidation三方库
NuGet\Install-Package FluentValidation.AspNetCore -Version 11.3.0
2、编写校验类
public class AddUserValidator: AbstractValidator<UserVo>
{
public AddUserValidator() {
RuleFor(user=> user.UserName).NotNull().NotEmpty()
.WithMessage("用户名不能为空");
RuleFor(user => user.Password)
.MinimumLength(4).WithMessage("密码不能小于4位")
.MaximumLength(8).WithMessage("密码不能超过8位");
RuleFor(user => user.PhoneNumber).Matches(@"^\d{11}$")
.WithMessage("电话号码格式不正确");
RuleFor(user => user.Email).EmailAddress();//校验邮箱格式
}
}
3、在program.cs文件中注册校验类
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
//UserVo是需要验证的传入参数类型
builder.Services.AddScoped<IValidator<UserVo>, AddUserValidator>();
4、在Controller中依赖注入FluentValidation服务并使用
public class UserManageController: ControllerBase
{
private readonly IValidator<UserVo> addUserValidator;
public UserManageController(IValidator<UserVo> addUserValidator){
this.addUserValidator = addUserValidator;
}
[HttpPost]
public async Task<IActionResult> AddUser(UserVo userVo)
{
ValidationResult validationResult = addUserValidator.Validate(userVo);
if (!validationResult.IsValid)
{
string errors = "";
foreach (var error in validationResult.Errors)
{
errors += error.ErrorMessage;
}
return BadRequest(errors);
}
}
}