Net C#을 사용 하 여 ASP.NET에서 페이지를 보고 하는 사용자 지정 오류를 만드는 방법

이 문서의 Microsoft Visual Basic.NET 버전을 참조 하십시오.
308132 .

이 문서에서는 다음 Microsoft.NET Framework 클래스 라이브러리 네임 스페이스:
  • System.Diagnostics

이 작업에서는

요약

ASP.NET에서 발생 하는 경우에 오류에 응답 하 고 Visual C#.NET 코드를 사용 하는 방법을 설명 합니다. ASP.NET에서는 오류 처리 옵션에서 기존의 Microsoft Active Server Pages (ASP) 향상 되었습니다. ASP.NET에서는 응용 프로그램에서 여러 다른 수준에서 오류를 처리할 수 있습니다.

맨 위로

ASP.NET의 새로운 기능

ASP.NET에서는 처리 오류에 응답 하는 방법에 여러 가지 발전을 제공 합니다. 기존 ASP에서 "On Error Resume Next" (또는 JScript에서 try-catch 블록)를 사용 하 여 오류를 처리합니다. 또한 Microsoft 인터넷 정보 서비스 (IIS) 5.0을 실행 하는 경우 사용자 지정 오류 보고 페이지를 만드는 ASPError 개체를 사용 합니다. 그러나 이러한 방법에는 제한이 있습니다.

ASP.NET에서는 여러 단계를 처리 하는 ASP.NET 응용 프로그램을 실행할 때 발생할 수 있는 오류 응답을 제공 합니다. ASP.NET에서는 트래핑 및 발생 하는 경우에 오류에 응답 하는 데 사용할 수 있는 세 가지 주요 방법: Page_ErrorApplication_Error응용 프로그램 구성 파일 (Web.config).

이 문서에서는 ASP.NET 응용 프로그램에 새 기능을 사용 하는 방법을 보여 줍니다. 사용자 지정 오류 페이지와 일반 오류 보고 ASP.NET 직접 관련이 있기 때문에 제공 하는 방법을 설명 합니다 있지만이 문서의 처리 방법은 try-catch-finally 블록 및 공용 언어 런타임 (CLR) 예외 시스템 같은 다른 오류를 설명 하지 않습니다.

맨 위로

Page_Error 메서드를 사용 하는 방법

Page_Error 이벤트 처리기를 페이지 수준에서 발생 하는 오류를 잡는 방법을 제공 합니다. 때와 샘플 코드를 간단히 오류 정보를 표시, 이벤트 또는 동작을 실행할 수 있습니다.

참고: 데모 목적 으로만 브라우저에 자세한 오류 정보를 표시 하는이 예제입니다. 특히 응용 프로그램이 인터넷에서 실행 되는 경우에 응용 프로그램의 최종 사용자에 게 자세한 정보를 표시 하는 경우 주의 해야 합니다. 적절 한 작업을 오류가 발생 했음을 알리는 다음 이벤트 로그에 오류 정보를 실제로 기록 하 고 사용자에 게 메시지를 표시할 수 있습니다.

이 예제에서는 Page_Load 이벤트 처리기에 오류가 발생 하면 null 예외를 throw 합니다. Page_Error 이벤트 처리기를 사용 하는 방법을 보여 주는 초기 페이지를 만들려면 다음이 단계를 수행 합니다.
  1. 프로젝트에 PageEvent.aspx 라는 이름의 새 파일을 추가 하려면 다음과 같이 하십시오.
    1. Microsoft Visual Studio.NET을 엽니다.
    2. 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭 하 고 추가를 가리킨 다음 Web Form 추가클릭 합니다.
    3. 이름 텍스트 상자에 PageEvent.aspx입력 하 고 열기를 클릭 합니다.
  2. 다음 코드를 PageEvent.aspx에 추가:
    <script language=C# runat="server">void Page_Load(object sender, System.EventArgs e)
    {
    throw(new ArgumentNullException());
    }

    public void Page_Error(object sender,EventArgs e)
    {
    Exception objErr = Server.GetLastError().GetBaseException();
    string err ="<b>Error Caught in Page_Error event</b><hr><br>" +
    "<br><b>Error in: </b>" + Request.Url.ToString() +
    "<br><b>Error Message: </b>" + objErr.Message.ToString()+
    "<br><b>Stack Trace:</b><br>" +
    objErr.StackTrace.ToString();
    Response.Write(err.ToString());
    Server.ClearError();
    }
    </script>


    참고: 이 코드 샘플에서 AutoEventWireup 특성은 명시적으로 설정 하지. AutoEventWireup 특성 값을 명시적으로 할당 하지 않으면 기본 값 true 가 사용 됩니다. Visual Studio.NET 개발 응용 프로그램을 사용 하는 웹 양식 서식 파일 코드가 명시적으로 AutoEventWireup 특성 값을 false로 설정 합니다. Visual Studio.NET 템플릿 코드에서이 특성에 할당 된 기본값 및 ASP.NET을 사용 하는 기본값 차이가 있습니다. AutoEventWireup 특성 값 false에 선언 된 이벤트 처리기에 설정 되 고 있습니다. ASPX 페이지가 실행 되지 않습니다. 이 기능에 대해 모르면 혼동 수 있습니다.
  3. 파일 메뉴에서 저장 PageEvent.aspx를 클릭 합니다.
  4. 페이지를 마우스 오른쪽 단추로 클릭 하 고 페이지를 실행 하려면 브라우저에서 보기 클릭 합니다. 오류가 발생 하 고 코드 사양에 따라 보고 있는지 확인 합니다.
참고: 코드 발급 Server.ClearError에 대 한 호출을 확인할 수 있습니다. 오류를을 Application_Error 이벤트 처리기에 계속할 수 없습니다.

또한 취해야 참고 Inherits 특성을 @ Page 지시문에서. Inherits 가 설정 되 면 해당 페이지로 이동 하기 전에 프로젝트를 빌드해야 합니다. 프로젝트를 먼저 빌드할 하지 않는 경우 다음과 같은 오류 메시지가 나타납니다.
'Project.PageEvent' 올바른 유형이 아닙니다.
맨 위로

Application_Error 메서드를 사용 하는 방법

Page_Error 이벤트 처리기와 마찬가지로 사용할 수 있습니다. 있습니다 Application_Error 이벤트 처리기는 응용 프로그램에서 발생 하는 오류를 처리할 수 있습니다. 이벤트의 응용 프로그램 수준 범위가 응용 프로그램 오류 정보를 기록 또는 발생할 수 있는 다른 응용 프로그램 수준 오류를 처리할 수 있습니다.

다음 예제 Page_Error 위의 코드 예제를 기반으로 하 고 Page_Load 에서 오류 Page_Error 이벤트 처리기에서 트래핑 하지가 발생 합니다. Application_Error 이벤트 처리기는 응용 프로그램의 Global.asax 파일에서 지정 됩니다. 이 섹션의 단계에서는 편의상 예외 throw Application_Error 이벤트 처리기의 Global.asax 파일에서 오류를 트래핑 하 고 이벤트 로그에 오류를 기록 하는 새 페이지를 만듭니다. 다음 단계는 Application_Error 메서드를 사용 하는 방법을 보여 줍니다.
  1. 프로젝트를 AppEvent.aspx 라는 이름의 새 파일을 추가 합니다.
  2. 다음 코드를 AppEvent.aspx에 추가:
    <script language=C# runat="server">void Page_Load(object sender, System.EventArgs e)
    {
    throw(new ArgumentNullException());
    }
    </script>


    참고: AutoEventWireup 특성에 대 한 "Page_Error" 절에서 설명 하는 정보는이 단계에서는 코드 예제에도 적용 됩니다. 자세한 내용은 "Page_Error" 섹션의 정보를 참조 하십시오.
  3. 파일 메뉴에서 AppEvent.aspx 저장을 클릭 합니다.
  4. Application_Error 이벤트 처리기 AppEvent.aspx 페이지의 Page_Load 이벤트 처리기에서 throw 하는 오류를 잡아내는 Global.asax 파일에 추가 합니다. 확인 하려면 이벤트 로그를 사용 하 여 Global.asax System.Diagnostics 네임 스페이스 를 사용 하 여 다른 문을 추가 해야 합니다.

    Global.asax 파일에 다음 코드를 추가 합니다.
    using System.Diagnostics;
    protected void Application_Error(object sender, EventArgs e)
    {
    Exception objErr = Server.GetLastError().GetBaseException();
    string err ="Error Caught in Application_Error event\n" +
    "Error in: " + Request.Url.ToString() +
    "\nError Message:" + objErr.Message.ToString()+
    "\nStack Trace:" + objErr.StackTrace.ToString();
    EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    Server.ClearError();
    //additional actions...
    }

  5. Global.asax 파일을 저장 합니다.
  6. Visual Studio.NET에서 빌드 메뉴에서 빌드를 클릭 합니다.
  7. 페이지를 마우스 오른쪽 단추로 클릭 한 다음 브라우저에서 보기를 클릭 합니다. 하지만이 경우 페이지는 비어 있게 됩니다, 그리고 이벤트 로그에 새 항목이 추가 된 것을 확인해 두어야. 이 샘플은 이벤트 뷰어에서 액세스할 수 있는 응용 프로그램 로그에 항목을 만듭니다. 오류를 기록한 후 보다 친숙 한 다른 오류 페이지로 사용자를 리디렉션합니다 또는 필요에 따라 몇 가지 추가 작업을 수행 하는 것이 좋습니다.
맨 위로

Web.config 파일을 사용 하는 방법

Server.ClearError 를 호출 하지 않으면 트랩 Page_Error 또는 Application_Error 이벤트 처리기에서 오류 메시지, 오류를 처리 하는 경우 Web.config 파일의 < customErrors > 섹션의 설정에 따라. < CustomErrors > 섹션에서 리디렉션 페이지를 기본 오류 페이지 (defaultRedirect)로 지정 하거나 발생 하는 HTTP 오류 코드를 기반으로 특정 페이지를 지정할 수 있습니다. 사용자에 게 오류 메시지를 사용자 지정 하려면이 메서드를 사용할 수 있습니다.

오류가 발생 한 응용 프로그램의 이전 수준에서 잡지 못한 경우 사용자 지정 페이지가 표시 됩니다. 여기서는 Server.ClearError 는 호출 되지 않습니다 있도록 Global.asax 파일을 수정 하는 방법을 보여 줍니다. 따라서 오류를 잡는 마지막 지점인 Web.config 파일에서 오류가 처리 됩니다.
  1. 앞의 예제에서 Global.asax 파일을 엽니다.
  2. Web.config 파일에서 오류가 표면 되도록 Server.ClearError 줄을 주석 처리 합니다.
  3. 변경 내용을 Global.asax에 저장 합니다. 코드는 다음과 비슷한 나타나야 합니다.
    using System.Diagnostics;
    protected void Application_Error(object sender, EventArgs e)
    {
    Exception objErr = Server.GetLastError().GetBaseException();
    string err ="Error Caught in Application_Error event\n" +
    "Error in: " + Request.Url.ToString() +
    "\nError Message:" + objErr.Message.ToString() +
    "\nStack Trace:" + objErr.StackTrace.ToString();
    EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    //Server.ClearError();
    //additional actions...
    }

  4. 사용자 지정 페이지로 사용자를 리디렉션할 < customErrors > 섹션에 다음 코드를 추가 합니다.
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On"></customErrors>

    참고: 관련 된 웹 서버 및 응용 프로그램 이름이 참조 되도록 defaultRedirect 특성에서 파일 경로 수정 해야 합니다.
  5. 이 수준에서 오류를 기본 오류 페이지로 보내지기 때문에 ErrorStatus.htm 이라는 이름의 오류 페이지를 만들어야 합니다. 이 메서드를 사용 하는 오류 페이지에 대 한.htm 페이지를 사용 하는이 예제 이므로 사용자에 게 표시 되는 내용을 제어 하는 점을 염두에 두십시오. ErrorStatus.htm에 다음 코드를 추가 합니다.
    <HTML><HEAD>
    <TITLE></TITLE>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 7.0">
    </HEAD>
    <BODY>
    <b>Custom Error page!</b>
    <br>
    You have been redirected here from the <customErrors> section of the
    Web.config file.
    </BODY>
    </HTML>

  6. 코드를 테스트 하려면 파일을 저장 하 고 프로젝트를 빌드한 다음 AppEvent.aspx 브라우저에서 볼. 공지는 오류가 발생 ErrorStatus.htm 페이지로 이동 됩니다.
< CustomErrors > 섹션에 있는 defaultRedirect 특성의 값으로 기본 오류 페이지를 참조할 수도 있지만 리디렉션하는 발생 하는 HTTP 오류 코드에 따라 특정 페이지를 지정할 수도 있습니다. 이 옵션에 대 한 < 오류 > 자식 요소가 있습니다. 예를 들어:
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On"><error statusCode="404" redirect="filenotfound.htm" />
</customErrors>

참고: DefaultRedirect < customErrors > 섹션에 지정 된 페이지는.htm 파일입니다. 난

On으로 설정 된 mode 특성을 포함 하는 < customErrors > 섹션을 확인 합니다. Mode 특성은 오류 리디렉션이 발생 하는 방법을 제어 하는 데 사용 됩니다. 예를 들어, 응용 프로그램을 개발 하는 경우 대부분의 경우 실제 ASP.NET 오류 메시지를 보려면을 보다 친숙 한 오류 페이지로 이동 하지 않을. Mode 특성에는 다음과 같은 설정이 포함 됩니다.
  • : 예외로 지정한 defaultRedirect 페이지로 사용자를 리디렉션합니다. 이 모드는 주로 프로덕션 환경에서 사용 됩니다.
  • Off: 사용자 예외 정보를 얻고 defaultRedirect 페이지로 리디렉션되지 않습니다. 이 모드는 주로 개발 환경에서 사용 됩니다.
  • RemoteOnly: (localhost를 사용)가 로컬 컴퓨터에 사이트에 액세스 하는 사용자가 예외 정보를 받을 합니다. 다른 모든 사용자는 defaultRedirect 페이지로 리디렉션됩니다. 이 모드는 주로 디버깅에 사용 됩니다.
맨 위로

문제 해결

Microsoft Windows 2000 및 Microsoft Windows XP의 기본 설치에서는 ASP.NET 작업자 프로세스에서 웹 응용 프로그램 코드를 실행합니다. 이 프로세스의 id는 ASPNET 계정 이라고 하는 권한이 없는 로컬 계정이 기본값으로 사용 됩니다. ASP.NET의 베타 릴리스에서 프로세스 id 컴퓨터에서 많은 권한 가진 강력한 관리 계정 시스템 이었습니다.


기본 설치는 Windows Server 2003 (IIS 6)에 ASP.NET 작업자 프로세스에서 웹 응용 프로그램 코드를 실행합니다. 이 프로세스의 id NetworkService 라는 제한 된 계정을 기본값으로 사용 됩니다.

이 변경 내용과 영향이 기사에서 코드를 실행 하는 추가 액세스 권한이 필요할 수 있는 다른 코드에 대 한 자세한 내용은 다음 웹 사이트를 방문:
Microsoft.NET Framework 버전 1 보안 변경
http://msdn2.microsoft.com/en-us/library/ms994923.aspx
맨 위로

참조

속성

문서 ID: 306355 - 마지막 검토: 2017. 2. 6. - 수정: 1

Microsoft ASP.NET 1.0, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft ASP.NET 1.1, Microsoft Visual C# .NET 2003 Standard Edition

피드백