ASP.NET Web API2에서 예외 처리 방법은 총 3가지가 있습니다.
- ExceptionFilter
- ExceptionHandler
- ExceptionLogger
ExceptionFilter
특정 작업이나 Controller에서 발생한 예외를 처리할 때 적합합니다.
IExceptionFilter를 구현하는 ExceptionFilterAttribute를 상속받아 ExceptionFilter를 생성하면 OnException메소드에서 예외 처리가 가능합니다.
actionExecutedContext를 통해 예외 유형에 접근하고 응답을 변경하여 client에게 알려줄 수 있습니다.
Exception Filter가 처리하지 못하는 오류를 포함하여 응용프로그램 내에서 발생하는 모든 오류에 대해 커스터마이징하여 응답을 보낼 수 있습니다.
Exception Filter가 처리하지 못하는 오류.
1. 컨트롤러 생성자에서 발생 된 예외
2. 메세지 핸들러에서 발생 된 예외
3. 라우팅 중 발생 된 예외
4. 응답 직렬화 과정에서 발생 된 예외
ExceptionLogger
처리되지 않은 모든 예외가 발생했을 때 항상 호출 되어 로그를 남길 수 있습니다. Logger에서 응답을 보낼 수는 없습니다.
ExceptionLogger vs ExceptionHandler
1. Logger는 Web API에서 모든 예외가 발생했을 때, 항상 호출됩니다. 하지만 Handler는 응답을 보낼 수 있는 경우에만 호출됩니다. 응답을 보낼 수 없는 경우에 대해 아래와 같이 설명되어있습니다.
응답을 보내는 중에 예외가 발생했을 경우, 이미 상태코드, 헤더 및 부분 컨텐트가 이미 유선을 통과해 새로운 응답을 보내기 어려우므로 간단히 연결을 중단하고 로그를 남긴다. - MS Docs
2. ExceptionLogger는 여러 개 등록 가능, ExceptionHandler는 하나만 등록 가능.
- 응답을 보낼 수 없는 경우 재현
MS Docs 문서를 참고하여 ExceptionLogger만 호출되는 경우를 재현하려 했으나 실패했습니다. 혹 재현 해보신 분은 공유 부탁드립니다. - 왜 ExceptionLogger는 여러개, ExceptionHandler는 한개만 등록 가능할까
Handling Errors in Web API Using Exception Filters and Exception Handlers
'.NET > ASP.NET Web API2' 카테고리의 다른 글
ASP.NET Web API pipeline (0) | 2018.03.28 |
---|---|
ASP.NET Web API2 (0) | 2018.03.12 |