Minimal Api<五> 新增模型驗證(fluentValidate)
阿新 • • 發佈:2022-03-16
上一節我們跑通了資料庫,並向user表中添加了一條使用者記錄。這一節我們模擬一樣使用者登入驗證。
一、在UserServer中put介面用於使用者名稱和密碼的驗證。fluentValidate的基本用法自己找資源看吧。
app.MapPut("/api/Login", (Microsoft.AspNetCore.Http.HttpContext ctx, LoginDto user) => { using (var serviceScope = app.ServiceProvider.CreateScope()) { ValidationResult result= ctx.Request.Validate<LoginDto>(user); if (!result.IsValid) { return new HttpResult<Core.Entity.SysUser>() { code = 100, message = string.Join(",", result.Errors.Select(s => s.ErrorMessage).ToList()) }; } sysUserRepository= serviceScope.ServiceProvider.GetRequiredService<ISysUserRepository>(); Core.Entity.SysUser sysUser = sysUserRepository.FindEntity<Core.Entity.SysUser>(u => u.Name == user.UserName && u.Password == user.Password); if (sysUser != null) {return new HttpResult<Core.Entity.SysUser>() { code = 200, message = "登入成功。" }; } else { return new HttpResult<Core.Entity.SysUser>() { code = 101, message = "使用者名稱或者密碼錯誤。" }; } } });
二、給模型新增驗證邏輯,演示就先放一個驗證使用者名稱為空的驗證就好了。簡單些。
public class LoginDtoValidator : AbstractValidator<LoginDto> { public LoginDtoValidator() { RuleFor(x => x.UserName).NotNull().NotEmpty().WithMessage("使用者不可為空"); } }
三、建一個管道拓展檔案,將驗證模型類注入到容器
public static class ValidationExtensions { public static IServiceCollection AddValidation(this IServiceCollection services, ConfigurationManager configure) { services.AddScoped<IValidator<LoginDto>, LoginDtoValidator>(); return services; }
builder.Services.AddValidation(builder.Configuration);
四、再在上面的驗證拓展中介軟體中攔截請求並注入一個方法即在請求中注入一個驗證模型的例項。
public static class ValidationExtensions { public static IServiceCollection AddValidation(this IServiceCollection services, ConfigurationManager configure) { services.AddScoped<IValidator<LoginDto>, LoginDtoValidator>(); return services; } public static ValidationResult Validate<T>(this HttpRequest request, T model) { var validator = request.HttpContext.RequestServices.GetService<IValidator<T>>(); return validator.Validate(new ValidationContext<T>(model)); } }
五、這樣就可以使用request進行驗證方法。如下:
ValidationResult result= ctx.Request.Validate<LoginDto>(user); if (!result.IsValid)
六、執行一下試試看,輸入上一節新增的使用者和密碼。excute一下。結果如下是成功的。
七、刪掉username ,再點一次訪問,提示使用者不可空。跟再loginDtoValidator裡面設定的為空範圍資訊一致。