2010-06-10 2 views
5

내가 지원하는 응용 프로그램에서 오류 처리를 재 작업하고 단순화하는 방법을 찾고 있습니다. 우리는 현재 우리가 만든 모든 기본 클래스로부터 상속받은 모든 페이지를 가지며, 차례로 System.Web.UI.Page로부터 상속받습니다. 이 기본 클래스 내에서 OnError 메서드는 현재 재정의되고 MyBase.OnError를 호출 한 다음 사용자 지정 로깅 메서드 중 하나를 호출합니다.OnError를 재정의 할시기?

OnError 메서드를 재정의하는 데 도움이되지 않으며 Global.asax의 Application_Error 메서드가 처리되지 않은 예외 (로깅)를 처리 한 다음 customErrors 섹션을 다음과 같이 처리하도록하는 것이 좋습니다. config는 사용자를 리디렉션하는 프로세스를 트리거합니다.

사람이이 방법을 아주 자주 오버라이드하는 것처럼 보이지만 MSDN의 this 기사에서 나를 똑같이 생각하게 만듭니다.

답변

2

나는 사용자 정의 클래스라는 PageBase 만들 :

public class PageBase : Page 
{ 
    protected override void OnError(..) 
    { 
    //handle error, redirect to error page 
    } 
} 

을 그래서 내가 한 번만해야하고, 오류를 처리되지 않은 잡아 오류 페이지로 리디렉션 것을 사용합니다. 이렇게하면 나는 그것을 한 번해야한다. 나는 Page.Error 이벤트가 애플리케이션 오류에 대한 찬반론을 가지고 있다는 것을 모른다. 하지만 여기서는 편리 할 수 ​​있으므로 페이지 오류를 사용합니다. 오류를 해결하고 페이지 컨텍스트 내에서 오류 페이지로 바로 리디렉션 할 수 있습니다. 내 개인적인 취향.

MSDN 링크를 이용해 주셔서 감사합니다. 그것은 꽤 좋은 자료였습니다.

HTH.

+0

그러나 : 또한

, 나는 당신의 질문의 일부가 아닌 건 알지만 나는 오류 로깅을위한 ELMAH 볼 것인가? 페이지 컨텍스트 내에서 정보를 처리해야하는 경우 해당 컨텍스트 (페이지, 사용자 입력, 화면에 메시지 표시 등의 특정 데이터 로깅)에서 오류를 처리하려는 이유가 무엇인지 이해하지만 왜 재정의 PageError 또는 Application_Error를 사용하는 대신 기존 OnError 메서드를 사용합니까? –

+0

page_error는 onerror (OnLoad 메서드 등에서 Page_Load가 호출 됨)에서 비롯된 것이므로 OnError가 그 이유입니다. Page_Error와 동일합니다 ... 실제 질문은 왜 페이지 오류 대 앱 오류입니까? –

+1

위 링크에서 "global.asax : Application_Error"절 위에있는 단락에서 코드를 OnError Override 메서드는 Page_Error를 사용하는 것과 동일하지 않습니다. 귀하의 경우에는 리디렉션하기 위해 해당 기능을 재정의한다고 가정합니다. 아마도 괜찮을 것입니다. 필자의 경우 OnError 메서드 내에서 그 기능을 실제로 오버라이드하고 있지는 않습니다. 우리는 던져진 예외에 대해 매우 일반적인 로깅을하고 있습니다. 우리는 어플리케이션 수준에서 로깅을 넣고 OnError 메서드를 제거 할 수 있다고 생각합니다. 귀하의 의견을 보내 주셔서 감사합니다. –

0

응용 프로그램의 일부 페이지 만 기본 클래스에서 상속 받고 오류를 다르게 처리해야하는 시나리오를 볼 수 있습니다. 다른 모든 오류는 Application_Error에 의해 캐치/로그됩니다.

2

OnError 메서드를 재정의 한 적이 없습니다. 전역 asax의 Application_Error를 사용하여 기본 클래스에서 상속받지 못한 페이지를 캐치합니다. 또한 메서드를 재정 의하여 메서드의 기능을 변경하는 데 사용되므로 수행하지 않으면 메서드를 재정의하지 않습니다. 다시, 왜의 OnError 메서드를 재정의,

http://code.google.com/p/elmah/