17.エラーページ

6950 ワード

  • ページにエラーが発生した場合、ASP.Netはエラー情報を表示し、これは面白くないし、サイトの内部実現情報を漏洩し、サイトにセキュリティ上の危険性をもたらす.そのため、エラーページをカスタマイズする必要があります.エラーが発生した場合、開発者がカスタマイズしたページが表示されます.
  • webを構成する.config,customErrors領域の構成
  •   
  •   

  • modeの3つのオプション値:on:常にカスタマイズエラーページが表示されます.off:カスタムエラーページを表示せず、呼び出しスタックなどの異常情報を直接表示します.remoteonle:ネイティブアクセス表示呼び出しスタックなどの異常情報、外部ユーザの表示カスタマイズエラーページ.一般的にremoteonlyに設定されており、エラーが発生すると、管理者はサーバのブラウザで詳細なエラー情報を見ることができ、一般ユーザーには見えません.定義エラーページでRequestを判断することができる.UserHostAddressは、一部のipが異常情報を表示するように設定し、Sessionを読み取ることができ、管理者であれば異常情報を表示することができます.
  • errorサブエレメントは、異なるステータスコードに対して異なるエラーページを使用するように設定され、多くのサイトが404を特殊なエラーページにしている.個別に設定されていないステータスコードエラーはdefaultRedirectで指定されたページを表示します.
  • エラーページはhtmページでもaspxページでも使用できます.aspxページではHttpContext.Current.Server.GetLastError()は例外オブジェクトを取得し、一般的には例外情報をユーザーに表示するのではなく、例外ログを使用して異常を記録し、エラーページで例外オブジェクトを取得する場合はcustomErrorsにredirectMode="ResponseRewrite"を設定します.デフォルトはクライアントリダイレクトなので、エラーページでは例外オブジェクトは取得できません.

  • 例:
       1.特定のファイルにアクセスするときにファイルが見つからないエラーページFileNotFoundの2つのページを作成します.htm、別のエラー時のエラーページ:defaultErr.aspx.
       2.ErrorTestを設立するaspx、このページを実行すると、システムにエラーが発生します.
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ErrorTest.aspx.cs" Inherits="    .ErrorTest" %>
    
    
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head runat="server">
    
        <title></title>
    
    </head>
    
    <body>
    
        <form id="form1" runat="server">
    
        <div>
    
        
    
        </div>
    
        </form>
    
    </body>
    
    </html>

    そのpage_loadイベントのコード:
                if (!IsPostBack)
    
                {
    
                    SqlConnection conn = new SqlConnection("IP:127.0.0.1&db=tt");
    
                    conn.Open();
    
                }

    3.webを設定する.configファイル
    <?xml version="1.0" encoding="utf-8"?>
    
    
    
    <!--
    
             ASP.NET          ,   
    
      http://go.microsoft.com/fwlink/?LinkId=169433
    
      -->
    
    
    
    <configuration>   
    
      
    
        <system.web>
    
          <customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/ErrorPages/defaultErr.aspx">
    
            <error statusCode="404" redirect="~/ErrorPages/FileNotFound.htm" />
    
          </customErrors>
    
            <compilation debug="true" targetFramework="4.0" />
    
          <httpRuntime requestValidationMode="2.0"/>
    
        </system.web>
    
    
    
    </configuration>

    4.エラーが発生した場合、エラーの具体的な情報を記録するための日記があり、プロジェクトでErrorRecordsを作成する.txtファイル
    defaultErr.aspxページのPage_Loadイベントには、次のコードが書き込まれます.
     if (!IsPostBack)
    
                {
    
                  Exception ex=  HttpContext.Current.Server.GetLastError();
    
                  File.AppendAllText(Server.MapPath("~/ErrorRecords.txt"), ex.StackTrace);
    
                }

    5.ErrorTestを実行する.aspxはdefaultErrを自動的に表示します.Aspxページでは、エラーの具体的な情報をErrorRecordsに書きます.txtで.