* HandleErrorフィルター [#b766827c]
* HandleErrorアトリビュート [#b766827c]

** HandleErrorアトリビュートとは? [#a56ca50e]

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

*** 補足:ExceptionFilterアトリビュートとHandleErrorアトリビュート [#ee829850]
- コントローラー内で例外した例外はException filterアトリビュートのOnException()メソッドで処理される。
- デフォルトのException filterがHandleError。

** HandleErrorフィルターの使用例 [#qdf04099]
*** コントローラー [#z4334a70]
 [HandleError]
 public ActionResult Index()
 {
     throw new Exception("HandleError Exception");
     return View();
 }

*** Web.config [#uc1a201a]
 <system.web 
   <customErrors mode="On"></customErrors>
 </system.web 

*** Views\Shared\Error.cshtml [#b379c161]
 @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リダイレクトさせる [#l56441a9]
*** Web.config [#c69e457e]
 <customErrors mode="On" defaultRedirect="~/Error/Index" redirectMode="ResponseRedirect">
   <error statusCode="403" redirect="~/Error/Forbidden" /
 </customErrors>
*** エラーコントローラー Controllers\ErrorController.cs [#c96a2cb5]
 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 [#hadb9374]
 (略)

** HandleErrorの制約 [#sec836e9]
+ Not support to log the exceptions 
+ Doesn't catch HTTP exceptions other than 500 
+ Doesn't catch exceptions that are raised outside controllers 
+ Returns error view even for exceptions raised in AJAX calls 

** 参考 [#m27796a8]
- http://prideparrot.com/blog/archive/2012/5/exception_handling_in_asp_net_mvc
- http://www.dotnetexpertguide.com/2013/05/aspnet-mvc-handleerror-action-filter.html
- http://stackoverflow.com/questions/183316/asp-net-mvc-handleerror

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