我在某处读过Web API方法中不建议使用TRY CATCH。
我正在对方法进行以下调用,如果一切顺利,我想返回一个Employee对象以及Status 200但是如果出现问题,例如数据库调用失败,等等。我想返回状态500.处理该代码的正确方法是什么?
[HttpPost]
public async Task<IHttpActionResult> PostNewEmployeeAsync(Employee emp)
{
var newEmployee = await RegisterEmployee(emp);
return Ok(emp);
// What if I had a database error in RegisterEmployee method. How do I detect the error and send InternalServerError()
}
private async Task<Employee> RegisterEmployee(Employee emp)
{
// Call DB to register new employee, then return Employee object
}
答案 0 :(得分:1)
您的代码应该返回与您拥有的案例相匹配的错误代码,例如,如果您的代码在数据库中找不到所需的资源,则返回NotFound,
但是如果您的代码引发异常,请避免使用try / catch块包装您的代码,而异常应该冒泡到您可以全局处理它的级别,为此您有很多选项,如:
1-实现ExceptionFilter,您可以在其中处理控制器中引发的所有未处理异常(这不包括在管道中的控制器之前发生的任何异常)。
有关ExceptionFilterAttribute的详细信息,请参阅this。
2-如果您使用的是Web API 2,则可以实现IExceptionHandler接口,您可以在其中处理管道中任何位置发生的所有异常,并且您可以返回所需的错误。
有关Web API 2中全局异常处理的更多详细信息,请参阅this。
希望有所帮助。
答案 1 :(得分:0)
你不想完全避免尝试/捕捉,你只需要非常小心。将代码包装在try
块中,并捕获您期望的异常。在catch
内,返回错误响应。