다음을 통해 공유


방법: 응용 프로그램 수준 오류 처리

업데이트: 2007년 11월

이 코드 예제에서는 요청을 처리하는 동안 처리되지 않은 모든 ASP.NET 오류 즉, Try/Catch 블록이나 페이지 수준 오류 처리기에서 catch되지 않은 모든 오류를 catch하는 오류 처리기를 Global.asax 파일에 만드는 방법을 보여 줍니다. 예제에서 처리기는 컨트롤을 GenericErrorPage.aspx라는 일반 오류 페이지로 전송하며, 일반 오류 페이지는 오류를 해석하여 적절한 메시지를 표시합니다.

예제

다음 예제는 오류 처리기의 전체 예제에 나와 있는 전체 코드 예제의 일부입니다.

Global.asax 파일에서 오류 이벤트 처리기를 활성화하려면 Web.config 파일에서 defaultRedirect에 대한 파일을 지정하지 말아야 합니다. 구성 파일의 우선 순위가 더 높습니다. 따라서 customErrors를 Off로 설정하거나 defaultRedirect 설정을 제거할 수 있습니다. Web.config 구성 파일의 customErrors가 Off로 설정된 경우 Global.asax의 Application_Error 이벤트 처리기에서 처리되지 않은 모든 오류를 처리합니다.

보안 정보:

Global.asax 파일에 Application_Error 처리기가 없는 경우에는 Web.config 파일에서 customErrors를 Off로 설정하지 않도록 주의해야 합니다. 사이트에서 오류를 일으킨 임의의 사용자에게 웹 사이트에 대한 손상된 정보가 노출될 수 있습니다.

강력한 프로그래밍

오류가 발생하기 쉬운 코드의 경우에는 전역 오류 처리기에 의존하는 것보다 Try/Catch 블록 안에 해당 코드를 넣는 것이 좋습니다.

Global.asax 파일에 정의된 오류 처리기는 ASP.NET 런타임에서 요청을 처리하는 동안 발생하는 오류만 catch합니다. 예를 들어, 사용자가 응용 프로그램에 없는 .aspx 파일을 요청하면 오류를 catch합니다. 그러나 존재하지 않는 .htm 파일을 요청하면 오류를 catch하지 않습니다. ASP.NET 오류가 아닌 경우에는 IIS(인터넷 정보 서비스)에 사용자 지정 처리기를 만들면 됩니다. 사용자 지정 처리기도 서버 수준 오류에 대해서는 호출되지 않습니다.

Global.asax 파일에서 직접 요청의 오류 정보를 출력할 수는 없으며 컨트롤을 보통 Web Forms 페이지 등 다른 페이지로 전송해야 합니다. 컨트롤을 다른 페이지로 전송할 때는 Transfer 메서드를 사용합니다. 이렇게 하면 GetLastError 메서드에서 오류 정보를 가져올 수 있도록 현재 컨텍스트가 유지됩니다.

오류를 처리한 후에는 Server 개체(HttpServerUtility 클래스)의 ClearError 메서드를 호출하여 오류 정보를 지워야 합니다.

보안

악의적인 사용자가 응용 프로그램을 훼손하는 데 도움이 될만한 오류 정보는 표시하지 마십시오. 자세한 내용은 방법: 안전한 오류 메시지 표시를 참조하십시오.

참고 항목

작업

방법: 페이지 수준 오류 처리

개념

오류 처리기의 전체 예제