ASP.NETでは、ハンドルされなかった例外はGlobal.asaxのApplication_Error(HttpAplication.Errorイベントのハンドラ)で処理できる。
発生した例外は this.Server.GetLastError()で取得できるのだが、例外は基本的にHttpUnhandledExceptionにラップされている(必ずではない)ので注意する必要がある。
例外を処理したら this.Server.ClearError()でクリアすること。ただし、Web.configのcustomErrorsセクションに設定したエラー処理方法を適用させたい場合はクリアしない。
Global.asax void Application_Error(object sender, EventArgs e)
{
Exception ex =
this.Server.GetLastError() is HttpUnhandledException ?
this.Server.GetLastError().InnerException :
this.Server.GetLastError();
this.Server.ClearError();
if (ex is ApplicationException)
{
// 業務上の例外に対する処理
}
else
{
// 技術的な例外に対する処理
}
}
また、ページ単位で例外ハンドラを用意することもできる。
この場合はPage_Error(TemplateControl.Errorイベントのハンドラ)で処理する。
Global.asaxのApplication_Errorとは違い、GetLastError()で取得できる例外はハンドルされなかった例外そのものである。
Hoge.aspx.cs
protected void Page_Error(Object sender, EventArgs e)
{
Exception ex = this.Server.GetLastError();
this.Server.ClearError();
if (ex is ApplicationException)
{
// 業務上の例外に対する処理
}
else
{
// 技術的な例外に対する処理
}
}