我们应该发送什么响应代码异常- WebAPI

本文关键字:代码 异常 WebAPI 响应 什么 我们 | 更新日期: 2023-09-27 18:12:30

我在写Web-API方法。其中一个方法类似于

public IHttpActionResult Post([FromBody]MyDTO)
{
   //validations 
   try
   {
      InsertInToDB(MyDTO.SomeField);
   }
   catch(Exception ex)
   {
      // Say some exception has occurred while inserting in to DB. For eg. SomeField is not a acceptable value.
      // What is the response that I should send to the API user ?
      // Notfound, BadRequest does not seem to be fit in this case.
   }
}

注意:InsertIntoDB返回一个void

现在,如果在该方法中发生了一些异常,我应该发送给用户的HttpStatusCode是什么?

NotFoundBadrequest的反应似乎不适合这种情况。有什么想法吗?

我们应该发送什么响应代码异常- WebAPI

发送回的Exception取决于以下几点:

首先,用户给你发了不好的信息吗?还是你的服务器出了问题?

4XX状态码用于用户搞砸的时候。

4 xx:

如果问题是用户发送了一个格式错误的请求,返回400 Bad Request

如果问题是您正在使用POST来确定资源是否存在(例如通过搜索),那么如果他们试图访问的资源没有找到,则404 Not Found将是合适的。

如果问题是插入这个值会导致现有值的问题(假设它们有完全相同的名称,他们不应该;或其他验证式错误:409 Conflict是合适的。

5 xx

5XX状态码用于你的代码出错的时候。用户做的一切都是正确的,但你还是搞砸了。

例如,如果您的数据库关闭,500503是合适的。

顺便说一句,抓毯子Exception是不好的。在这种情况下,如果你有不同的验证,你应该创建可以在出现验证错误时抛出的异常类;为了区别于用户除了代码出错之外什么都写。

在本例中,我将使用:

ValidationFailedException ->Web层返回400ConflictException→Web层返回409ItemDoesNotExistException→Web层返回404

注意,你的数据层不应该依赖于web层或任何与互联网相关的东西。这意味着你应该有内部的Exception类;丢弃它们,并使用它们在您的Web层中生成适当的HttpException