Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在web api应用程序的不同层中传递HttpStatusCodes_C#_Asp.net Web Api2_Http Status Codes - Fatal编程技术网

C# 在web api应用程序的不同层中传递HttpStatusCodes

C# 在web api应用程序的不同层中传递HttpStatusCodes,c#,asp.net-web-api2,http-status-codes,C#,Asp.net Web Api2,Http Status Codes,我正在编写一个web api应用程序,我已经将其分为不同的项目,如web、服务、数据访问-因此基本上web api控制器与服务层联系,然后服务层可以访问数据访问层 我只是返回了一个bool,让我知道数据访问方法是否已完成ok,然后在服务层中获取此信息,然后返回控制器…在控制器中,我可以使用200或500等HTTPStatusCode进行响应。这取决于操作是否返回了true或false 使用HttpStatusCodes代替bool是一种好的做法吗?或者HTTP状态码应该只在控制器中使用,以向调用

我正在编写一个web api应用程序,我已经将其分为不同的项目,如web、服务、数据访问-因此基本上web api控制器与服务层联系,然后服务层可以访问数据访问层

我只是返回了一个bool,让我知道数据访问方法是否已完成ok,然后在服务层中获取此信息,然后返回控制器…在控制器中,我可以使用200或500等HTTPStatusCode进行响应。这取决于操作是否返回了true或false

使用HttpStatusCodes代替bool是一种好的做法吗?或者HTTP状态码应该只在控制器中使用,以向调用web api的应用程序返回响应,还是应该是其他的


谢谢,

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

这实际上取决于层之间分离的原因,以及每层涉及的内容。我要问自己的一个问题是,为什么您有一个服务层?是因为它包含业务逻辑吗?是因为意图是在WebAPI上下文之外重用它吗?或者您是否希望服务层依赖于WebAPI上下文(即,它是一个web请求,而不是在winform中重用的服务)


最有可能的是,您希望将处理HTTP细节的工作限制在控制器上(当然,这只是我的观点)。但我不想把它当作一条硬性规定。

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

这实际上取决于层之间分离的原因,以及每层涉及的内容。我要问自己的一个问题是,为什么您有一个服务层?是因为它包含业务逻辑吗?是因为意图是在WebAPI上下文之外重用它吗?或者您是否希望服务层依赖于WebAPI上下文(即,它是一个web请求,而不是在winform中重用的服务)


最有可能的是,您希望将处理HTTP细节的工作限制在控制器上(当然,这只是我的观点)。但是我不想把它当作一条硬性规定。

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

很难在不了解大局的情况下提出具体的解决方案,但你可以考虑如下:

  • 如果应用程序依赖于无法获取的数据,则引发异常。它将传播为500响应
  • 使用enum而不是bool使代码更具可读性
  • 创建DataResponse类以包含数据访问操作的结果。然后,您可以使用将DataResponse调整为HttpResponse

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

    很难在不了解大局的情况下提出具体的解决方案,但你可以考虑如下:

  • 如果应用程序依赖于无法获取的数据,则引发异常。它将传播为500响应
  • 使用enum而不是bool使代码更具可读性
  • 创建DataResponse类以包含数据访问操作的结果。然后,您可以使用将DataResponse调整为HttpResponse

  • 您不应该向下或向上传播http状态代码。如果你这样做了,那么你就是在注入对你努力工作去解耦的依赖。N层体系结构的一大优点是,您的web层可能主要用于与服务层交互,但当您想连接本机移动应用程序调用它,或连接windows服务调用它,或连接桌面应用程序调用它时会发生什么。你基本上是在限制它的潜力,因为你试图在链的上下保持这个错误。

    你不应该把http状态代码向下或向上传播。如果你这样做了,那么你就是在注入对你努力工作去解耦的依赖。N层体系结构的一大优点是,您的web层可能主要用于与服务层交互,但当您想连接本机移动应用程序调用它,或连接windows服务调用它,或连接桌面应用程序调用它时会发生什么。您试图在整个错误链上下延续该错误,这基本上限制了它的潜力。

    也许一个代码示例会有所帮助,但这个问题似乎是一个观点,而不是具体的问题。也就是说,我的困惑在于,如果您的服务返回布尔值,那么该服务如何返回要返回给客户端的实际数据?同样,代码示例会有所帮助!嗨,好吧,我可能只是在向数据库中写入一些东西,而不会返回任何东西。所以bool只是回应它能够完成write ok。不需要返回任何新的记录ID等。也许一个代码示例会有所帮助,但这个问题似乎是一个观点,而不是具体的问题。也就是说,我的困惑在于,如果您的服务返回布尔值,那么该服务如何返回要返回给客户端的实际数据?同样,代码示例会有所帮助!嗨,好吧,我可能只是在向数据库中写入一些东西,而不会返回任何东西。所以bool只是回应它能够完成write ok。不需要返回任何新的记录ID等。好的,谢谢。是的,随着项目的进展,服务层可能会有业务逻辑。好的,谢谢。是的,服务层可能具有作为t的业务逻辑