Day10-1

概要

Global.asaxでエラー処理を記述しよう!

このレッスンの狙い

Global.asaxとは?

Global.asaxで利用可能なアプリケーションイベント

分類: 条件

イベントハンドラ 概要
Application_Start アプリケーションが初回起動した一回のみ発生
Session_Start ユーザセッションが初回起動した1回のみ発生
※ セッション変数などを初期化するためなどに使用
Session_End ユーザセッションがクローズしたタイミングで発生
※ セッション変数にプールされた情報をDBなどに最終的に保存するために使用する。
Application_End アプリケーションが破棄されたタイミングで発生
※ アプリケーション変数にプールされた情報をDBなどに最終的に保存するために使用する。
Application_Error アプリケーション内で処理されない例外(エラー)が発生した場合に発生
※エラーログの記録や管理者への通知、エラーページの生成などのために使用

分類: リクエスト

イベントハンドラ 概要
Application_BeginRequest HTTPハンドラがリクエスト処理を開始する前に発生
Application_AuthenticateRequest 認証の準備ができたタイミングで発生
※ 独自の認証機能を構築したい場合に利用
Application_PostAuthenticateRequest ユーザ認証が完了したタイミングで発生
Application_AuthorizeRequest ユーザが認定されるタイミングで発生
Application_PostAuthorizeRequest ユーザの認定が完了したタイミングで発生
Application_ResolveRequestCache リクエストを、キャッシュ処理するタイミングで発生
Application_PostResolveRequestCache ASP.NETがキャッシュからの処理を許可した場合に発生
Application_PostResolveRequestHandler 要求が適切なイベントハンドラにマップされたタイミングで発生
Application_AcquireRequestState リクエストに関連づいた状態(セッション状態など)を取得するタイミングで発生
※ 独自のセッション管理を行いたい場合に利用
Application_PostAcquireRequestState リクエストに関連づいた状態を取得し終えたタイミングで発生
Application_PreRequestHandlerExecute HTTPハンドラがページの実行を開始する直前に発生
Application_PostRequestHandlerExecute HTTPハンドラがページの実行を開始する直後に発生
Application_ReleaseRequestState すべての実行を完了したタイミングで発生
Application_PostReleaseRequestState リクエストに関連づいた状態をストアに保存し終えたタイミングで発生。
※ 本イベントのタイミングで、出力のフォルダ処理なども行われる。
Application_UpdateRequestCache 操作完了後に発生(出力キャッシュを更新)
Application_PostUpdateRequestCache 出力キャッシュの更新を完了したタイミングで発生。
Application_LogRequest 要求に対するログの記録処理に先立って発生。
Application_PostLogRequest 要求に対するログの記録処理が完了したタイミングで発生。
Application_EndRequest すべてのリクエスト処理が完了したタイミングで発生。
Application_PreSendRequestHeaders HTTPヘッダーをクライアントに送信する直前に発生。
Application_PreSendRequestConten HTTPコンテンツをクライアントに送信する直前に発生。

アプリケーションイベントの発生順序

アプリケーションイベントの発生順序

ファイルへの書き込み方法について

Stream.Writerクラス

構文
public StreamWriter(string path, bool append, Encoding encoding);

  Using StreamWriter writer = new StreamWriter(filePath, false, Encoding.GetEncoding("shift_jis"));
	...
	End Using

StringBuilderクラス

Server.GetLastErrorメソッド

プロパティ 概要
HelpLink 例外に関連付けられているヘルプファイルのURL
InnerException 現在の例外の原因となったExcetptionオブジェクト
Message 例外に関する詳細情報
Source 例外の原因となったアプリケーションまたはオブジェクト名
stackTrace 例外に関するスタックトレース

カスタムのエラーページの定義

要素


<customErrors mode="{On|Off|RemoteOnly}" {defaultRedirect="リダイレクト"]>
	[<error statusCode="HTTPエラーステータス" redirect="リダイレクト先" />]
<customErrors>

設定値 概要
On カスタムエラーが有効、defaultRedirect属性が未指定の場合には、一般ユーザ用の標準エラーを表示
Off カスタムエラーが無効。「常に」詳細な開発者用のエラー表示します。
RemoteOnly リモート接続のユーザに対してのみカスタムエラー画面を表示、ローカル接続のユーザに対しては詳細な開発者用エラー画面を表示

HTTPのエラーステータス

コード メッセージ 概要
400 Bad Request リクエストの文法が不正
401 Unauthorized 未認証,または認証失敗
403 Forbidden アクセス拒否
404 Not Found リソースが見つからない
405 Method Not Allowed 許可されていないHTTPメソッド
406 Not Acceptable Acceptヘッダで認められていないコンテンツタイプ
407 Proxy Authentication Required Proxy認証が必要
408 Request Time-out リクエスト処理がタイムアウト
409 Conflict リソースの競合
410 Gone 指定アドレスが不明
411 Length Required Connect-Lengthヘッダが必要
412 Precondigiton Failed リクエストヘッダが指定する条件が拒否された
413 Request Entry Too Large リソースが大きすぎる
414 Request-URI Too Large リクエストURIが長すぎる
415 Unsupported Media Type サポートされていないフォーマット
416 Requested Range Not Satisfiable Rangeヘッダが不正
417 Exception Failed Exceptヘッダが不正
500 Internal Server Error サーバ内部エラー(ASP.NETの処理などで失敗)
501 Not Implemented リクエスト処理のために必要な機能が実装されていない
502 Bad Gateway ゲートウェイやプロキシサーバからの不正な応答
503 Service Unavailiable HTTPサーバが利用できない
504 Gateway Time-out ゲートウェイのタイムアウト
505 HTTP Version Not Supported 未サポートのHTTPプロトコルバージョン

飛ばすページの切り分け


<customErrors mode="On" defaultRedirect="error.html">
	<error statusCode="500" redirect="error500.html" />
</customErrors>

まとめ

TOPへ