Asp.net web api2 发送Web API响应的正确方法

Asp.net web api2 发送Web API响应的正确方法,asp.net-web-api2,Asp.net Web Api2,我在某个地方读到,在Web API方法中不建议使用TRY-CATCH 我正在对一个方法进行以下调用,如果一切顺利,我希望返回一个Employee对象以及状态200,但如果出现问题,例如数据库调用失败等,我希望返回状态500。处理这些代码的正确方法是什么 [HttpPost] public async Task<IHttpActionResult> PostNewEmployeeAsync(Employee emp) { var newEmployee = await Regi

我在某个地方读到,在Web API方法中不建议使用TRY-CATCH

我正在对一个方法进行以下调用,如果一切顺利,我希望返回一个Employee对象以及状态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
}
[HttpPost]
公共异步任务PostNewEmployeeAsync(员工emp)
{
var newEmployee=等待注册员工(emp);
返回Ok(emp);
//如果RegisterEmployee方法中出现数据库错误,该怎么办?如何检测错误并发送InternalServerError()
}
专用异步任务注册表员工(员工emp)
{
//调用DB注册新员工,然后返回员工对象
}

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

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

但是,如果您的代码引发异常,请避免通过try/catch块包装您的代码,相反,异常应该上升到您可以全局处理它的级别,要做到这一点,您有许多选项,如:

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

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

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

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


希望这会有所帮助。

是的,这正是我正在做的,但不确定为什么在Web API方法中使用try-catch是一个坏主意。如果做得不对,则会更加危险,因此需要使用自包含的异常处理来防止被利用。