发送Web API响应的正确方法

时间:2014-11-29 22:32:40

标签: asp.net-web-api2

我在某处读过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
}

2 个答案:

答案 0 :(得分:1)

您的代码应该返回与您拥有的案例相匹配的错误代码,例如,如果您的代码在数据库中找不到所需的资源,则返回NotFound,

但是如果您的代码引发异常,请避免使用try / catch块包装您的代码,而异常应该冒泡到您可以全局处理它的级别,为此您有很多选项,如:

1-实现ExceptionFilter,您可以在其中处理控制器中引发的所有未处理异常(这不包括在管道中的控制器之前发生的任何异常)。

有关ExceptionFilterAttribute的详细信息,请参阅this

2-如果您使用的是Web API 2,则可以实现IExceptionHandler接口,您可以在其中处理管道中任何位置发生的所有异常,并且您可以返回所需的错误。

有关Web API 2中全局异常处理的更多详细信息,请参阅this

希望有所帮助。

答案 1 :(得分:0)

你不想完全避免尝试/捕捉,你只需要非常小心。将代码包装在try块中,并捕获您期望的异常。在catch内,返回错误响应。