在Web api应用程序中的不同层中传递HttpStatusCodes

时间:2017-05-17 19:29:55

标签: c# asp.net-web-api2 http-status-codes

我正在编写一个web api应用程序,我将其划分为各种项目,如Web,Services,DataAccess - 所以基本上web api控制器会联系服务层,然后可以访问数据访问层。

我只是返回一个bool,让我知道数据访问方法是否已经完成,然后在服务层中选择它然后再回到控制器...然后我可以用HTTPStatusCode 200响应,或者500等等。取决于操作是否返回了真或假。

使用HttpStatusCodes代替bool是好的做法......或者只应在Controller中使用HTTP状态代码 - 返回对调用web api的应用程序的响应,还是应该是其他的?

谢谢,

3 个答案:

答案 0 :(得分:1)

模糊的问题,但我会尝试回答。

这实际上取决于层之间分离的原因,以及每个层所关注的内容。我会问自己的一个问题是为什么你有一个服务层?是因为它包含业务逻辑吗?是因为intent有一个选项可以在WebAPI上下文之外重用它吗?或者您希望Service层依赖于WebAPI上下文(即它是一个Web请求,而不是在winform中重用的服务。)

最有可能的是,你想要限制处理HTTP细节到控制器(恕我直言,这显然只是我的意见)。但是我不会把它当作一条坚硬而快速的规则。

答案 1 :(得分:1)

首先,课程应该尽可能少地了解周围的世界。假设您实现the repository pattern来获取数据。您的存储库(数据访问层)甚至不应该知道HTTP,也不应该期望它是Web应用程序的一部分。它唯一关心的是访问一个特定的表。

如果不了解整体情况,很难提出具体的解决方案,但您可能会考虑以下因素:

  1. 如果您的应用程序依赖于无法获取的数据,则引发异常。它将传播为500响应。
  2. 使用enum而不是bool来使代码更具可读性。
  3. 创建DataResponse类以封装数据访问操作的结果。然后,您可以使用the adapter pattern使DataResponse适应HttpResponse。

答案 2 :(得分:1)

您不应该向下或向上传播http状态代码。如果你这样做,你就会依赖于你工作的东西而难以解耦。关于N层架构的一个好处是,是的,您的Web层可能主要用于与您的服务层进行交互,但是当您想要连接本机移动应用程序来调用它或Windows服务来调用时会发生什么它,或一个桌面应用程序来调用它。你基本上是通过试图在链中持续存在这种错误来阻碍它的潜力。