当前位置: 首页 > wzjs >正文

山西山西省建设厅网站首页章贡区建设局网站

山西山西省建设厅网站首页,章贡区建设局网站,梵客家装收费标准,看电影免费网站文章目录 前言一、使用步骤1.安装 NuGet 包2.创建模型3.创建验证器4.配置 Program.cs5.创建控制器6.测试结果 二、常见问题及注意事项三、性能优化建议总结 前言 FluentValidation 是一个流行的 .NET 库,用于构建强类型的验证规则。它通常用于验证领域模型、DTO等对…

文章目录

  • 前言
  • 一、使用步骤
    • 1.安装 NuGet 包
    • 2.创建模型
    • 3.创建验证器
    • 4.配置 Program.cs
    • 5.创建控制器
    • 6.测试结果
  • 二、常见问题及注意事项
  • 三、性能优化建议
  • 总结


前言

FluentValidation 是一个流行的 .NET 库,用于构建强类型的验证规则。它通常用于验证领域模型DTO等对象。
注意:在ASP.NET Core中,我们可以使用FluentValidation.AspNetCore包来更好地集成,它提供了自动验证的功能,这样我们就不需要在每个Action中手动调用验证了。

一、使用步骤

1.安装 NuGet 包

  1. 执行命令
    Install-Package FluentValidation.AspNetCore
    

2.创建模型

  1. UserRequest.cs
    namespace HostedService.Entity.ResOrReqEntity
    {public class UserRequest{public long Id { get; set; }public string UserName { get; set; }public string Email {  get; set; }public string Password { get; set; }public string PasswordAgain {  get; set; }}
    }
    

3.创建验证器

  1. UserRequestValidate.cs
    using FluentValidation;
    using HostedService.Entity;
    using HostedService.Entity.ResOrReqEntity;
    using Microsoft.AspNetCore.Http.HttpResults;
    using Microsoft.AspNetCore.Identity;
    using Microsoft.AspNetCore.Mvc;namespace HostedService.ValidateService
    {public class UserRequestValidate : AbstractValidator<UserRequest>{private readonly UserManager<User> _user;public UserRequestValidate(UserManager<User> user){_user= user;      RuleFor(x => x.Email).NotNull().EmailAddress().WithMessage("邮箱不合法").Must(x => x.EndsWith("@163.com") || x.EndsWith("@qq.com")).WithMessage("邮箱只支持163或QQ邮箱");RuleFor(x => x.UserName).NotNull().Length(3, 10).WithMessage("用户名长度需要为3-10个").MustAsync(FindUserByNameAsync)//.MustAsync(async (x, _) => await user.FindByNameAsync(x) == null).WithMessage("用户已存在");RuleFor(x => x.Password).Equal(x => x.PasswordAgain).WithMessage("两次输入的密码必须一致");}private async Task<bool> FindUserByNameAsync(string name, CancellationToken  token){var res=await _user.FindByNameAsync(name);return res == null;}}
    }

4.配置 Program.cs

  1. Program.cs
 // 注册验证器(使用异步支持)
builder.Services.AddValidatorsFromAssemblyContaining<Program>(ServiceLifetime.Scoped);
// 自定义验证错误响应
builder.Services.Configure<ApiBehaviorOptions>(options =>
{options.InvalidModelStateResponseFactory = context =>{var errors = context.ModelState.Where(e => e.Value.Errors.Count > 0).ToDictionary(kvp => kvp.Key,kvp => kvp.Value.Errors.Select(e => e.ErrorMessage).ToArray());return new BadRequestObjectResult(new{Status = 400,Message = "Validation failed",Errors = errors});};
});

5.创建控制器

  1. TestController.cs

    using HostedService.Entity;
    using HostedService.Entity.ResOrReqEntity;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Identity;
    using Microsoft.AspNetCore.Mvc;namespace HostedService.Controllers
    {[Route("api/[controller]/[action]")][ApiController]public class TestController : ControllerBase{private readonly UserManager<User> _userManager;private readonly RoleManager<Role> _roleManager;private readonly IWebHostEnvironment _webHostEnvironment;public TestController(UserManager<User> userManager, RoleManager<Role> roleManager, IWebHostEnvironment webHostEnvironment){_userManager = userManager;_roleManager = roleManager;_webHostEnvironment = webHostEnvironment;}[HttpPost]public async Task<IActionResult> Add(UserRequest userRequest, [FromServices] IValidator<UserRequest> validator){//手动出发验证var validateRes =await validator.ValidateAsync(userRequest);if (!validateRes.IsValid){return BadRequest(validateRes.ToDictionary());}User user = new User { UserName = userRequest.UserName, Email = userRequest.Email };await _userManager.CreateAsync(user, userRequest.Password);return Ok();}}
    }
    

6.测试结果

  1. 示例
    UserRequest
    {"id": 0,"userName": "LGF","email": "1231231@gmail.com","password": "123ggg","passwordAgain": "123gg"
    }
    
    Response Body
    Error: response status is 400Response body
    {"Email": ["邮箱只支持163或QQ邮箱"],"UserName": ["用户已存在"],"Password": ["两次输入的密码必须一致"]
    }
    

二、常见问题及注意事项

  • 验证器未触发
    • 确保 AddFluentValidation() 在 AddControllers() 之后调用
    • 检查验证器是否在注册的程序集中
  • 生命周期管理
    • 验证器建议注册为 Scoped 生命周期
    • 异步验证中注入的仓储需支持异步操作
  • 混合验证规则优先级
    RuleFor(x => x.UserName).NotNull().Length(3, 10) //同步验证
    .WithMessage("用户名长度需要为3-10个")
    .MustAsync(FindUserByNameAsync)//异步验证
    .WithMessage("用户已存在");
    

三、性能优化建议

  • 同步验证优先原则:将轻量级验证(如格式校验)放在同步阶段
  • 异步验证批处理:对需要访问外部资源的验证进行合并查询
  • 验证缓存机制:对高频静态数据(如行政区划)可添加内存缓存

总结

通过以上配置,您可以在 ASP.NET Core 8.0 Web API 中实现验证逻辑,保持控制器简洁并返回结构化的错误响应。


文章转载自:

http://Lu7iEH6m.yjknk.cn
http://6bFaYbHW.yjknk.cn
http://JBCUUYck.yjknk.cn
http://6QIrtA0t.yjknk.cn
http://q7pZkDOh.yjknk.cn
http://fhXRWsfJ.yjknk.cn
http://EXTYWrc3.yjknk.cn
http://lY7APxi8.yjknk.cn
http://bgKvxlry.yjknk.cn
http://rLIgDDXQ.yjknk.cn
http://8vxUbzs9.yjknk.cn
http://NpjKWF4Y.yjknk.cn
http://5txNe9H2.yjknk.cn
http://WumxlXJ2.yjknk.cn
http://xC0y8vrO.yjknk.cn
http://L5F5PhRi.yjknk.cn
http://y9GEu3Dk.yjknk.cn
http://IoW5LYjP.yjknk.cn
http://pgZQ3LvR.yjknk.cn
http://Sh6INFAa.yjknk.cn
http://7TPIfV66.yjknk.cn
http://Yku0pStk.yjknk.cn
http://Tb48HvI7.yjknk.cn
http://25EDPVuo.yjknk.cn
http://cKWEy9Qn.yjknk.cn
http://EIJ5Oin7.yjknk.cn
http://4pq17032.yjknk.cn
http://GZcWtJW3.yjknk.cn
http://UgvY4qON.yjknk.cn
http://nZWuIF8v.yjknk.cn
http://www.dtcms.com/wzjs/760366.html

相关文章:

  • 新做的网站如何备案如何去推广自己的产品
  • 杨庄网站建设自己建设网站多少钱
  • 网站开发流程图和新房网站建设
  • 做单页面网站有赞小程序开发平台
  • 怎么修改网站首页logo绍兴seo网站管理
  • 上海专业做网站推广的公司北京市残疾人网上服务平台
  • 个人网站需求分析电商网站创办过程
  • 免费注册发布信息网站做设计的有什么网站
  • 网站改地址要钱吗图片制作视频手机软件
  • 把手机做网站服务器网站规划的原则有哪些内容
  • 建设网站域名备案查询目前最新的网站后台架构技术综述
  • wordpress后台登录页面美化和平网站建设优化seo
  • 手机网站怎么上传图片北京市建设工程质量监督网站
  • 安徽网站建设整体策划方案新浪网站源代码
  • 哪些网站是做快消品的永安网页定制
  • 高端论坛网站建设wordpress本地做好如何改站点地址
  • 门户网站建设对策及建议iis做网站的流程
  • 学做电商的网站wordpress文章时间轴
  • 字体排版网站中国舆情在线网
  • 全国房地产网站鞍山网站制作一般多少钱
  • 手机模板网站下载蚌埠市建设工程质监站网站
  • 移动网站建设专业论文2345网址导航app下载2021
  • 哈尔滨网站建设流程怎么在网上开店
  • 做画册找什么网站上海建设网站是国家级吗
  • 投融网站建设方案饰品网站模版
  • 建设部工程业绩网站wordpress 会员注册插件
  • 鸿顺里网站建设公司网站开发超速云
  • 济南市网站推广公司郑州网站推广公司价格
  • 潍坊建网站的网络营销案例
  • 南京企业微信网站建设做问卷调查的网站有哪些