我们应该发送什么响应代码异常- 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
是什么?
NotFound
或Badrequest
的反应似乎不适合这种情况。有什么想法吗?
发送回的Exception取决于以下几点:
首先,用户给你发了不好的信息吗?还是你的服务器出了问题?
4XX
状态码用于用户搞砸的时候。
4 xx:
如果问题是用户发送了一个格式错误的请求,返回400 Bad Request
。
如果问题是您正在使用POST来确定资源是否存在(例如通过搜索),那么如果他们试图访问的资源没有找到,则404 Not Found
将是合适的。
如果问题是插入这个值会导致现有值的问题(假设它们有完全相同的名称,他们不应该;或其他验证式错误:409 Conflict
是合适的。
5 xx
5XX
状态码用于你的代码出错的时候。用户做的一切都是正确的,但你还是搞砸了。
例如,如果您的数据库关闭,500
或503
是合适的。
顺便说一句,抓毯子Exception
是不好的。在这种情况下,如果你有不同的验证,你应该创建可以在出现验证错误时抛出的异常类;为了区别于用户除了代码出错之外什么都写。
在本例中,我将使用:
ValidationFailedException
->Web层返回400ConflictException
→Web层返回409ItemDoesNotExistException
→Web层返回404
注意,你的数据层不应该依赖于web层或任何与互联网相关的东西。这意味着你应该有内部的Exception类;丢弃它们,并使用它们在您的Web层中生成适当的HttpException
。