我正试图根据DDD的一些原则,在.NET Core中为特定需求构建一个小框架,我想知道从应用层到api层返回验证错误的标准模式是什么。
我有两种方法:
- 强制所有应用程序服务方法返回固定结构(例如Response<>(,并在此Response类中添加一个名为ValidationErrors的属性,然后从应用层填充
- 从应用层抛出业务验证异常(例如EntityNotFoundException(,并从集中式中间件处理它们
就我个人而言,我更喜欢第一种方法,但我需要你的建议。
感谢
我不太喜欢第一种方法。你必须决定谁有责任确保方法的正确输入。例如,您可以将输入验证为方法中发生的第一件事。如果输入无效,那么在我看来,您应该抛出ArgumentNullException或ArgumentException,然后稍后进行处理。来自API的正确响应应该是状态代码400(错误请求(。使用ActionResult作为返回类型来返回类似的状态代码。验证也可以通过中间件来完成,您只需要检查控制器中的模型状态。我认为模型验证可以与其他框架联系起来,比如Fluent validation或类似的框架,如果你喜欢的话。https://docs.fluentvalidation.net/en/latest/aspnet.html
您也可以在控制器或其他地方手动调用验证器,并使用验证结果返回正确的http状态代码