我有一个非常简单的三层ASP.NET Core WebAPI
应用:
- Domain - 带有
Entities
、Data interfaces
、Services
和DTO
对象(这是唯一的输入和输出对象)。所以“域的接口(interface)”是接受输入 DTO 并返回输出 DTO 的服务。 - 基础设施 -
数据接口(interface)
(数据存储库)和 CodeFirst 迁移的实现。 - 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/