首页 > 解决方案 > .NETCore WebAPI 中的 FluentValidation 中间件是否足够,或者我应该再次在服务层中进行验证?

问题描述

我有一个非常简单的 3 层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));
            });

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

我应该再次在服务中“双重验证”吗?如果是这样,是否有一种平滑的方法可以重用我已经拥有的验证器?

标签: c#validation.net-coreasp.net-core-webapifluentvalidation

解决方案


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


推荐阅读