Mvc-framework-exception-handling

提供:Dev Guides
移動先:案内検索

MVCフレームワーク-例外処理

ASP.NETでは、エラー処理は標準のtry catchアプローチまたはアプリケーションイベントを使用して行われます。 ASP.NET MVCには、例外フィルターと呼ばれる機能を使用した例外処理のサポートが組み込まれています。 ここでは、onExceptionメソッドをオーバーライドする方法と、HandleErrorフィルターを定義する方法の2つの方法を学習します。

OnExceptionメソッドをオーバーライドする

このアプローチは、コントローラーレベルでアクションメソッド全体のすべての例外を処理する場合に使用されます。

このアプローチを理解するには、MVCアプリケーションを作成します(前の章で説明した手順に従います)。 次に、新しいControllerクラスを追加し、onExceptionメソッドをオーバーライドし、Actionメソッドで明示的にエラーをスローする次のコードを追加します-

MVC例外処理

ここで、アプリケーションで例外が発生したときにユーザーに表示される Error という名前の共通ビューを作成しましょう。 Viewsフォルダー内に、Sharedという新しいフォルダーを作成し、Errorという名前の新しいビューを追加します。

MVCエラー処理

新しく作成されたError.cshtml内の次のコードをコピーします-

MVC例外共通ビュー

ここでアプリケーションを実行しようとすると、次の結果が得られます。 上記のコードは、このコントローラー内のいずれかのアクションメソッドで例外が発生すると、エラービューを表示します。

MVC共通例外処理

このアプローチの利点は、同じコントローラー内の複数のアクションがこのエラー処理ロジックを共有できることです。 ただし、欠点は、複数のコントローラー間で同じエラー処理ロジックを使用できないことです。

HandleError属性

HandleError属性は、フィルターおよびアクションフィルターの章で学習したアクションフィルターの1つです。 HandleErrorAttributeは、IExceptionFilterのデフォルトの実装です。 このフィルターは、コントローラーアクション、フィルター、およびビューによって発生したすべての例外を処理します。

この機能を使用するには、まずweb.configのcustomErrorsセクションをオンにします。 web.configを開き、次のコードをsystem.web内に配置して、その値をOnに設定します。

<customErrors mode = "On"/>

[ビュー]の下の[共有]フォルダー内にエラービューが既に作成されています。 今回は、このViewファイルのコードを次のように変更して、HandleErrorInfoモデル(System.Web.MVCの下にある)で強く型付けします。

@model System.Web.Mvc.HandleErrorInfo

@{
Layout = null;
}

<!DOCTYPE html>
<html>
   <head>
      <meta name = "viewport" content = "width = device-width"/>
      <title>Error</title>
   </head>

   <body>
      <h2>
         Sorry, an error occurred while processing your request.
      </h2>
      <h2>Exception details</h2>

      <p>
         Controller: @Model.ControllerName <br>
         Action: @Model.ActionName
         Exception: @Model.Exception
      </p>

   </body>
</html>

ここで、コントローラファイルに[HandleError]属性を指定する次のコードをコントローラファイルに配置します。

using System;
using System.Data.Common;
using System.Web.Mvc;

namespace ExceptionHandlingMVC.Controllers {
   [HandleError]
   public class ExceptionHandlingController : Controller {

      public ActionResult TestMethod() {
         throw new Exception("Test Exception");
         return View();
      }
   }
}

ここでアプリケーションを実行しようとすると、次のスクリーンショットに示すようなエラーが表示されます。

MVC例外

ご覧のとおり、今回はエラーにコントローラーおよびアクション関連の詳細に関する詳細が含まれています。 この方法では、HandleErrorを任意のレベルで、またコントローラー全体で使用して、このようなエラーを処理できます。