gpt4 book ai didi

c# - 如何在 .net Core Web API 中构建数据验证?

转载 作者:可可西里 更新时间:2023-11-01 08:27:51 24 4
gpt4 key购买 nike

我有一个具有以下结构的 asp.net Core Web API:

View Layer: API endpoints
|
V
Controller Layer: Controller classes implementing endpoints
|
V
Business Logic Layer: Services
|
V
Data Access Layer: Proxy classes to our backend

有一系列端点都遵循这个结构。大多数 API 都是对后端的纯数据查询,但有些 API 也允许调用客户端提交数据。

我正在努力的是找到一种干净的方法来整合必须对提交的数据进行的各种验证。

我的初衷是让 Controller 层非常简单,将所有真正的“工作”(包括验证)交给服务层, Controller 层只负责发送适当的 HTTP 响应。不过,我的问题是,随着服务完成所有实际工作,如何最好地将它应该返回的内容反馈给 Controller 。

我可以使用数据注释捕获一些基本验证,在大多数情况下,就数据验证而言,这实际上可能就足够了。但这不包括其他问题,例如更复杂的验证或服务/数据访问层 WRT 读/写失败等。

我考虑过的一些想法:

  • 让服务层知道 IActionResult 接口(interface),并让它负责确定返回给调用客户端的内容。这然后混合了 Controller 和服务层,但使 Controller 层非常精简。

  • 为各种服务调用创建各种“OperationResults”对象,这些对象将封装任何错误消息、异常、错误代码等,由 Controller 层解释以确定发送回客户端的 http 响应。这是一个更清晰的分离,因为服务层根本不会与 http 代码混合,而是将 Controller 类转换为一大组开关以确定要发回的内容。

  • 根据在 Controller 级别和服务级别捕获有意义的内容来拆分验证。例如,向 Controller 传递一个空对象以进行保存显然应该拒绝它并返回 BadRequest(),但是当服务层也有自己的原因想要检查它时,在那里添加检查似乎是多余的。

诚然,我对 .net Web API 和 .net core 总体上有些陌生,所以如果有一些明显的可用功能我没有利用,我很想知道。

如有任何建议,我们将不胜感激。

最佳答案

主要思想是正确的 - 您需要在代码中分离正常流和错误流。一种主要方法是使用 .NET 异常来指示正常流程是不可能的。

  • 对于输入验证,使用 ActionFilter。您可以为所有 Controller 设置全局过滤器或为每个操作定义特定的过滤器。参见 Filters文档中的部分。

  • 在 Controller 操作执行期间,您应该尽快引发异常并停止进一步执行。是的,可以在任何级别(服务/业务层、​​DA 层等)上引发异常。

如何处理抛出的异常?

使用 ASP.NET Core 提供的错误处理方法(如 ExceptionHandler 或异常过滤器),您可以分析异常并相应地生成适当的/不同的响应。 查看相关 SO Error handling in ASP.NET Core 1.0 Web API (Sending ex.Message to the client)例如问题。还有 error-handling section在文档中。

关于c# - 如何在 .net Core Web API 中构建数据验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43355884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com