我正在编写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
回复似乎不适合这种情况。有什么想法吗?
答案 0 :(得分:5)
您发回的例外取决于一些事情。
首先,用户是否向您发送了错误的信息?或者你的服务器搞砸了?
4XX
状态代码适用于用户搞砸的情况。
如果问题是用户发送了格式错误的请求,请返回400 Bad Request
。
如果问题是您正在使用POST来确定资源是否存在(例如通过搜索),那么如果找不到他们尝试访问的资源,则404 Not Found
是合适的。
如果问题是插入此值会导致现有值出现问题(例如它们具有完全相同的名称而不应该;或者其他一些验证错误:409 Conflict
是合适的。< / p>
5XX
状态代码适用于代码搞砸的情况。用户做的一切都很正确,但你仍然搞砸了。
例如,if your database is down, a 500
or 503
is appropriate。
顺便说一句,抓住毯子Exception
是不好的。在这种情况下,如果您有不同的验证,则应创建可在出现验证错误时抛出的异常类;区别于用户做一切写入但代码出错。
在这种情况下,我有:
ValidationFailedException
- &gt; Web层返回400
ConflictException
- &gt; Web Tier返回409
ItemDoesNotExistException
- &gt; Web层返回404
请注意,您的数据层不应该依赖于Web层或任何与Internet相关的内容。这意味着你应该有内部的Exception类;抛出这些,并使用它们在您的Web层中生成适当的HttpException
。