.NET開発者のためのブログメディア

ASP.NETでアプリケーションレベルのエラー処理を行う方法
2020年04月16日
ASP.NETでアプリケーションを開発する場合、例外処理を実装する必要があります。例外処理の実装を怠るとエラー発生後、ユーザーにとってよくわからない画面に切り替わり、画面を操作することができなくなってしまいます。これを防ぐためにも例外処理の実装は忘れずに行いたいところです。
- SE
- 例外処理って忘れることが多々あります。以前、実装していなくてユーザーに迷惑をかけてしまいました。忘れないようにするためのコツとかありますか?
- PL
- コツとまではいえないですが、アプリケーションレベルで例外処理を行う方法もあります。エラーの防衛線は何重にもはっておきたいですよね。
目次
ASP.NETの例外処理の概要
C#開発者なら例外処理といえば、まず思い浮かべるのはtry~catch~finallyではないでしょうか。これを実装することで予期せぬエラーを捕捉し、画面にエラー内容を表示させてユーザーやアプリケーション運用者に知らせることができます。
この処理はコードレベルでの例外処理です。もちろんこの実装だけでも問題はありませんが、どうしても捕捉しきれいない箇所が出てきます。エラーはアプリケーションに付き物です。そういった捕捉しきれないエラーをカバーするのがアプリケーションレベルでの例外処理の役割となります。
アプリケーションレベルでのエラー処理のサンプルソース
global.aspxに例外エラーを捕捉するコーディングを行います。以下のサンプルソースではApplication_Errorの箇所を新たに追加しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System; using System.Web; using System.Web.Optimization; using System.Web.Routing; namespace WebApplication14 { public class Global : HttpApplication { void Application_Start(object sender, EventArgs e) { // アプリケーションのスタートアップで実行するコードです RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } void Application_Error(object sender, EventArgs e) { Exception exc = Server.GetLastError(); if (exc is HttpUnhandledException) { // Pass the error on to the error page. Server.Transfer("ErrorPage.aspx?handler=Application_Error%20-%20Global.asax", true); } } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ErrorPage.aspx.cs" Inherits="WebApplication14.ErrorPage_aspx" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div>Error</div> </form> </body> </html> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System; namespace WebApplication14 { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } public void btn_click(object sender, EventArgs e) { //ゼロ割エラーを起こします int test_zero = 0; int a = 5 / test_zero; } } } |
実行画面
ここでボタンを押下します。
エラー画面
エラー画面が表示されました。
- SE
- 例外処理ってtry~catch~finallyしか知らなかったです!これからはアプリケーションレベルでの例外処理の実装もして、エラーの防衛線を二重三重に張っておくことを心がけます。
- PL
- アプリケーションを開発するにはエラーはつきものですが、エラーを防ぐ努力は積極的に行いましょう。予期せぬエラーが発生すれば、ユーザーに迷惑をかけるのはもちろん、アプリケーションに対する信用も失う恐れがありますからね。
アプリケーションレベルでの例外処理を実装して品質を高めましょう
システムの設計書に、ここで例外処理を実装しましょうと記載されていることはほとんどありません。開発者自らが例外処理を考えて実装する必要があります。実装されていなければ開発リーダーの方にでも報告し、開発者目線からアプリケーションの品質を高めるようにしていきましょう。