在快速迭代的开发过程中,确保我们的应用程序能够正确处理有效且预期的输入变得尤为重要。因此,模型校验作为提高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的入参实体进行校验,校验通过后才能进入到控制器层
验证设置完成后,在控制器中的具体Action的模型参数上应用验证器,就能在进入Action之前进行自动验证。如果验证失败,则会根据我们在Startup中自定义的错误响应,返回友好的错误信息。
此外,FluentValidation提供了许多内置验证规则,如RuleFor
,你可以轻松地进行常规的数据规则检查。详细使用文档可以访问官方网站:
https://docs.fluentvalidation.net/en/latest/installation.html
如果你需要实现一些更复杂的自定义验证逻辑,你可以编写自定义的验证方法并在验证器中使用它们。以我们一开始提到的bizcaseid的校验为例,你可以类似这样实现:
以上就是使用FluentValidation库在.Net中进行模型验证的基本介绍。记得持续关注我,不断探索更多.Net技术知识。希望这篇文章对你有所帮助,助力你的.Net开发之旅!
本文暂时没有评论,来添加一个吧(●'◡'●)