c# - .NETCore WebAPI 中的 FluentValidation 中间件是否足够,或者我应该再次在服务层中进行验证?
问题描述
我有一个非常简单的 3 层ASP.NET Core WebAPI
应用程序:
- 域- 带有
Entities
、Data interfaces
和对象(它们是唯一的输入和输出对象)Services
。DTO
因此,“域的接口”是接受输入 DTO 并返回输出 DTO 的服务。 - 基础设施-
Data interfaces
(数据存储库)和 CodeFirst 迁移的实现。 - 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 中间件,在技术上验证控制器的输入。
我应该再次在服务中“双重验证”吗?如果是这样,是否有一种平滑的方法可以重用我已经拥有的验证器?
解决方案
您永远不必运行两次验证。应验证来自 Web API 的数据。如果您曾经将您的服务与除 Web API 之外的任何其他接口一起使用,您也可以在那里实现流畅的验证。这是实现流畅验证的一个很好的例子:https ://github.com/jasontaylordev/NorthwindTraders
推荐阅读
- node.js - 刷新页面后如何让用户保持登录状态?
- javascript - 如何使用 java 脚本查询选择器根据父元素选择子元素
- r - RenderTable Shiny 中数据表中的小数问题
- python - 如何在Python中按数组顺序随机获取数组
- r - R {targets} 包:如何使用字符串引用现有目标?
- python - 如何在 Dash Python 中使用本地字体(.otf 文件)
- python - 如何通过 python 与 ftdi f232rl 模块正确通信?
- sas - 如何在 sas 企业指南中开发配置文件?
- sql - 主查询列中的 SQL 查询子表
- php - 为什么 modal 不能与 PHP 一起用于 show 几句话