【.NET 10.0】使用FluentValidation

(.NET 6.0使用FluentValidation如下 )
https://blog.csdn.net/zhaoxingyu999/article/details/122349101?fromshare=blogdetail&sharetype=blogdetail&sharerId=122349101&sharerefer=PC&sharesource=zhaoxingyu999&sharefrom=from_link


从.NET 6.0 升级到了.NET 10.0 发现FluentValidation 用不起了

FluentValidation.AspNetCore包已弃用

下面是注入方法和实现自动验证的方法:

用到的包有:
FluentValidation.DependencyInjectionExtensions
SharpGrip FluentValidation AutoValidation

实现逻辑如下:

csharp 复制代码
using FluentValidation;
//第三方自动验证包
using SharpGrip.FluentValidation.AutoValidation.Mvc.Extensions;

public void ConfigureServices(IServiceCollection services)

{
 //扫描当前程序集中的所有Fluent验证器实现类并将它们注册到依赖注入容器中
 services.AddValidatorsFromAssembly(typeof(Program).Assembly, includeInternalTypes: true);
 //第三方 自动验证方法
 services.AddFluentValidationAutoValidation(configuration =>
 {
     configuration.OverrideDefaultResultFactoryWith<CustomResultFactory>();
 });
}

修改FluentValidation响应格式

csharp 复制代码
public class CustomResultFactory : IFluentValidationAutoValidationResultFactory
{
    /// <summary>
    /// 修改FluentValidation默认验证响应格式
    /// </summary>
    /// <param name="context"></param>
    /// <param name="validationProblemDetails"></param>
    /// <returns></returns>
    public IActionResult CreateActionResult(ActionExecutingContext context, ValidationProblemDetails? validationProblemDetails)
    {
        // 获取第一条错误消息
        var firstErrorMessage = context.ModelState
            .Values
            .SelectMany(v => v.Errors)
            .FirstOrDefault()?
            .ErrorMessage ?? "Validation failed";
        return new BadRequestObjectResult(new ResponseResult
        {
            code = 400,
            msg = firstErrorMessage,
            datas = null,
            success = false
        });
    }
}

实现自动验证:

SharpGrip FluentValidation AutoValidation 是

FluentValidation(v10+)库的扩展,使 MVC 控制器和最小 API(端点)能够实现自动异步验证。 库

FluentValidation.AspNetCore 已不再维护且不支持。因此,该库提供的自动验证支持已不再提供。

该库重新引入了MVC控制器的功能,并引入了对最小API(端点)的自动验证。它使开发者能够轻松地在项目中实现自动验证。


手动验证实现逻辑:

csharp 复制代码
 [HttpPost("save")]
 public async Task<IActionResult> Save([FromBody] TriggerDto req, IValidator<TriggerDto> validator)
  {
            validator.ValidateAndThrow(req);//并抛出异常
            validator.Validate(req);//仅验证
            return Ok(await _service.Save(req));
  }

三方库:https://github.com/SharpGrip/FluentValidation.AutoValidation

官方文档:https://docs.fluentvalidation.net/en/latest/#

相关推荐
曹牧9 小时前
C# WinForms应用程序中展示JSON内容
c#
真鬼12310 小时前
.Net 6.0快速下载
c#
雪豹阿伟11 小时前
6.C# —— 类与对象、数据类型、方法详解
c#·上位机
伽蓝_游戏14 小时前
第二章:深入 Unity 资源导入管线 (Asset Import Pipeline)
游戏·unity·c#·游戏引擎·游戏程序
爱炸薯条的小朋友16 小时前
全局锁的性能优势,以及链路优化为何常常低于预期——基于 `MatPoolsTest` 中小图池与大图池的实战复盘
opencv·算法·c#
心蓝无敌17 小时前
攻克Avalonia Dock布局中WebView等原生控件无法停靠的难题
c#·visual studio·avalonia·avalonia dock
guygg8818 小时前
C# 监听数据库数据变化(SqlDependency 实现)
数据库·oracle·c#
步步为营DotNet19 小时前
洞悉.NET 11:Blazor 与 Microsoft.Extensions.AI 的融合创新实践
人工智能·microsoft·.net
回忆2012初秋19 小时前
.NET 8.0 实战:基于 MQTTnet 封装高可用的 MQTT 发布/订阅工具类
开发语言·mqtt·.net
回忆2012初秋20 小时前
.NET 8.0 工业物联网实战:基于 S7netplus 封装高可用西门子 PLC 通信类
物联网·.net