HandleErrorアトリビュート

HandleErrorアトリビュートとは?

  • HandleErrorアトリビュートはコントローラー内のアクションメソッドで発生する例外をキャッチするのに使われる。
  • HandleErrorアトリビュートはデフォルトでGlobalFilterに追加されている。
    • MVC3: Glaobal.asax
    • MVC4: App_Statr/FilterConfig.cs: filters.Add(new HandleErrorAttribute()
  • HandleErrorは、Web.configでcustomErrors mode="On" の場合だけ例外をハンドル出来る。

補足:ExceptionFilterアトリビュートとHandleErrorアトリビュート

  • コントローラー内で例外した例外はException filterアトリビュートのOnException()メソッドで処理される。
  • デフォルトのException filterがHandleError。

HandleErrorフィルターの使用例

コントローラー

 [HandleError]
 public ActionResult Index()
 {
     throw new Exception("HandleError Exception");
     return View();
 }

Web.config

 <system.web 
   <customErrors mode="On"></customErrors>
 </system.web 

Views\Shared\Error.cshtml

 @model System.Web.Mvc.HandleErrorInfo
 <h1 class="text-danger">エラー</h1>
 <h2 class="text-danger">要求の処理中にエラーが発生しました。</h2>
 <dl>
    <dt>Controller</dt>
    <dd>@Model.ControllerName </dd>
    <dt>Action</dt>
    <dd>@Model.ActionName</dd>
    <dt>例外</dt>
    <dd>
        <pre>@Model.Exception</pre>
    </dd>
 </dl>

エラーページを表示せずにエラーURLへHTTPリダイレクトさせる

Web.config

 <customErrors mode="On" defaultRedirect="~/Error/Index" redirectMode="ResponseRedirect">
   <error statusCode="403" redirect="~/Error/Forbidden" /
 </customErrors>

エラーコントローラー Controllers\ErrorController.cs

 public class ErrorController : BaseController
 {
     public ActionResult Index()
     {
         return View();
     }
     public ActionResult Http403()
     {
         Response.StatusCode = 403;
         return Content("Forbidden:403", "text/plain");
     }
 }

エラーテンプレート Views\Error\Index.cshtml

 (略)

HandleErrorの制約

  1. Not support to log the exceptions
  2. Doesn't catch HTTP exceptions other than 500
  3. Doesn't catch exceptions that are raised outside controllers
  4. Returns error view even for exceptions raised in AJAX calls

参考


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2014-04-27 (日) 20:35:49