FluentValidation 中间件在 .NETCore WebAPI 中是否足够,或者我应该再次在服务层中进行验证?

Ish*_*mas 3 c# validation fluentvalidation .net-core asp.net-core-webapi

我有一个非常简单的三层ASP.NET Core WebAPI应用程序:

  1. - 包含EntitiesData interfaces和对象(这是唯一的输入和输出对象)ServicesDTO因此,“域的接口”是接受输入 DTO 并返回输出 DTO 的服务。
  2. 基础设施- Data interfaces(数据存储库)和 CodeFirst 迁移的实施。
  3. WebAPI - 标准 ASP.NET Core 3.1 Web API 项目。

WebAPI 项目在控制器中返回“输出”DTO。对于接受负载的端点,使用“输入”DTO。控制器与域中的服务非常相似。控制器向世界公开域服务(显然是域的接口)。

但接下来是验证......我熟悉 FluentValidation 和 ASP.NET Core 管道 - 它是一个很棒的中间件:

        services.AddControllers()
            .AddFluentValidation(opt =>
            {
                opt.RegisterValidatorsFromAssemblyContaining(typeof(PersonInputValidator));
            });
Run Code Online (Sandbox Code Playgroud)

我对每个“输入”DTO 实施验证,这效果很好,但是......我不确定这是否足够。如果您参加任何服务课程,它几乎都没有经过验证。它是 .NET Core 中间件,从技术上验证控制器的输入。

我应该再次在服务中“双重验证”吗?如果是这样,是否有一种顺利的方法来重用我已有的验证器?

Nev*_*ane 6

您永远不必运行验证两次。应验证来自 Web API 的数据。如果您曾经将服务与 Web API 之外的任何其他接口一起使用,您也可以在那里实现流畅的验证。这是实现流畅验证的一个很好的例子: https: //github.com/jasontaylordev/NorthwindTraders