2014-11-29 8 views
0

웹 API 메소드에서 TRY CATCH를 사용하지 않는 것이 좋습니다.웹 API 응답을 전송하는 적절한 방법

다음 메소드를 호출하여 메소드가 제대로 작동하면 상태 200과 함께 Employee 객체를 반환하고 싶습니다. 데이터베이스 호출이 실패합니다. 상태 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 
} 

답변

1

코드 데이터베이스 반환 NOTFOUND에서 필요한 리소스를 찾을 수없는 경우, 예를 들어, 당신이 가지고있는 경우 일치하는 에러 코드를 반환해야합니다 귀하의 코드,

하지만 코드가 예외가 발생하는 경우, 피 try/catch 블록으로 코드를 래핑하고 대신 예외를 전역 적으로 처리 할 수있는 레벨까지 버블 링해야합니다. 이렇게하려면 다음과 같은 여러 가지 옵션이 있습니다.

1 처리되지 않은 모든 핸들을 처리 할 수있는 ExceptionFilter를 구현합니다. 컨트롤러에서 발생한 예외 (파이프 라인의 컨트롤러 이전에는 예외가 발생하지 않음).

ExceptionFilterAttribute에 대한 자세한 내용은 this을 참조하십시오.

2 웹 API 2를 사용하는 경우 파이프 라인의 모든 예외가 처리 될 수있는 인터페이스 IExceptionHandler를 구현할 수 있으며 원하는 오류를 반환 할 수 있습니다.

웹 API 도움 2.

희망에 글로벌 예외 처리에 대한 자세한 내용은 this를 참조하십시오.

0

완전히 시도/포착하는 것을 피하기를 원하신다면, 실제로주의해야합니다. try 블록에 코드를 래핑하고 예상 한 예외를 잡으십시오. catch 안에 오류 응답을 반환하십시오.

+0

네, 그게 정확히 내가 뭘하고 있었는지는 잘 모르겠지만 웹 API 메소드에서 잡으려고 시도하는 것은 나쁜 생각입니다. – Sam

+0

잘못하면 더 위험합니다. 따라서 착취를 막기 위해 자체 포함 예외 처리를 사용해야합니다. –

관련 문제