提升.Net API的健壮性:FluentValidation实战教程,轻松搞定数据校验!

        在快速迭代的开发过程中,确保我们的应用程序能够正确处理有效且预期的输入变得尤为重要。因此,模型校验作为提高API健壮性及用户体验不可或缺的一个环节,也是我们编码中的一项基本任务。今天我们就来详细介绍一下如何在.Net项目中使用FluentValidation库来进行模型验证。

GitHub的地址为:

https://github.com/FluentValidation/FluentValidation

FluentValidation的引入与设置

        首先,FluentValidation是一个流行的.Net验证库,它通过使用流畅的接口和lambda表达式,让验证逻辑更加清晰易懂。那么如何在我们的项目中引入FluentValidation呢?

NuGet包的安装

        我们可以通过NuGet包管理器来引入FluentValidation.AspNetCore。你只需要执行以下命令(或在您的NuGet包管理器中搜索并安装):

dotnet add package FluentValidation.AspNetCore

在Startup中注入服务

        接下来,我们要在Api项目的Startup类中进行相应配置以使用FluentValidation。在ConfigureServices方法中做如下设置:

/// <summary>
/// 初始化模型验证
/// </summary>
/// <param name="services"></param>
private static void InitValidation(IServiceCollection services)
{
    //模型验证
    services.AddControllersWithViews()
    .AddFluentValidation(config =>//添加FluentValidation验证
    {


        //程序集方式添加验证
        // config.RegisterValidatorsFromAssemblyContaining(typeof(TMTotalCostGenerateDetailValidation));
        //注入程序集
        config.RegisterValidatorsFromAssembly(Assembly.Load(Assembly.GetExecutingAssembly().GetName().Name));
        config.RegisterValidatorsFromAssembly(Assembly.Load(Assembly.GetExecutingAssembly().GetName().Name.Replace("Api", "Domain")));
        //是否与MvcValidation共存,设置为false后将不再执行特性方式的验证
        config.RunDefaultMvcValidationAfterFluentValidationExecutes = false;
    });
    //重写模型验证错误
    services.Configure<ApiBehaviorOptions>(options =>
    {
        options.InvalidModelStateResponseFactory = (context) =>
        {
            var errors = context.ModelState
                .Values
                .SelectMany(x => x.Errors
                            .Select(p => p.ErrorMessage))
                .ToList();


            var result = new
            {
                code = "400",
                message = "Validation errors",
                data = errors
            };


            return new BadRequestObjectResult(result);
        };
    });
}

        在ConfigureServices中调用InitValidation(services);进行服务注入。


使用FluentValidation

        安排妥当后我们就可以在模型上写上我们的验证器。验证器需继承于AbstractValidator<T>,T是你的模型类型。

        这样在进入Controller之前就会自动对Controller的入参实体进行校验,校验通过后才能进入到控制器层

bcd5e4483a2951a4b4592879ae80dca8.png

        验证设置完成后,在控制器中的具体Action的模型参数上应用验证器,就能在进入Action之前进行自动验证。如果验证失败,则会根据我们在Startup中自定义的错误响应,返回友好的错误信息。

        此外,FluentValidation提供了许多内置验证规则,如RuleFor,你可以轻松地进行常规的数据规则检查。详细使用文档可以访问官方网站:

https://docs.fluentvalidation.net/en/latest/installation.html

        如果你需要实现一些更复杂的自定义验证逻辑,你可以编写自定义的验证方法并在验证器中使用它们。以我们一开始提到的bizcaseid的校验为例,你可以类似这样实现:

09ad0fb8f79eb3485289695c36a459ee.png

        以上就是使用FluentValidation库在.Net中进行模型验证的基本介绍。记得持续关注我,不断探索更多.Net技术知识。希望这篇文章对你有所帮助,助力你的.Net开发之旅!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值