c# - .NET Core WebAPI 中的 Fluent Validation 中间件是否足够,还是我应该再次在服务层中进行验证?

标签 c# validation .net-core asp.net-core-webapi fluentvalidation

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

  1. Domain - 带有 EntitiesData interfacesServicesDTO 对象(这是唯一的输入和输出对象)。所以“域的接口(interface)”是接受输入 DTO 并返回输出 DTO 的服务。
  2. 基础设施 - 数据接口(interface)(数据存储库)和 CodeFirst 迁移的实现。
  3. WebAPI - 标准 ASP.NET Core 3.1 Web API 项目。

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

然后是验证...我熟悉 FluentValidation 和 ASP.NET Core 管道 - 这是一个很棒的中间件:

        services.AddControllers()
            .AddFluentValidation(opt =>
            {
                opt.RegisterValidatorsFromAssemblyContaining(typeof(PersonInputValidator));
            });

我为每个“输入”DTO 实现验证,效果很好,但是......我不确定这是否足够。如果您参加任何服务类(class),则几乎没有经过验证。它是 .NET Core 中间件,在技术上验证 Controller 的输入。

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

最佳答案

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

关于c# - .NET Core WebAPI 中的 Fluent Validation 中间件是否足够,还是我应该再次在服务层中进行验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60478748/

相关文章:

c# - 如何获取外部服务器的时间(包括毫秒或(1/100 秒))?

jquery - 使用 html5 验证表单中输入的长度恰好为 10

java - 如何使用 javax.validation 将 @NotNull 约束应用于类中的所有字段?

forms - 在 Prototype 中使用表单验证的 HTML5 表单占位符回退

c# - 使用 ValueTask 等待单个 .NET 事件

c# - 无法从后台运行的进程中读取 STDOut

c# - 在 C# 中连接 Lambda 函数

c# - 如何强制脚本在特定位置执行?

asp.net-mvc - 无法使用 dotnet add package 安装包

c# - SqlCommand select from where 问题