• Minimal Api<五> 添加模型验证(fluentValidate)


    上一节我们跑通了数据库,并向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里面设置的为空范围信息一致。

     

  • 相关阅读:
    关于数据库的索引知识
    RESTful API设计相关
    Coroutine(协程)模式与线程
    Python网络编程中的服务器架构(负载均衡、单线程、多线程和同步、异步等)
    读懂diff
    Linux学习笔记——如何使用echo指令向文件写入内容
    ubuntu中执行定时任务crontab
    网络编程之异步IO,rabbitMQ笔记
    走进docker的世界之入门篇
    xml基础
  • 原文地址:https://www.cnblogs.com/choii/p/16014833.html
Copyright © 2020-2023  润新知