* コントローラー内での例外処理 [#pea54169]
* コントローラーのOnException()メソッド [#fa1dfa4f]
** コントローラー内でOnException()を自作してOverrideする [#q73ee7fe]
protected override void OnException(ExceptionContext filterContext)
{
if (filterContext.HttpContext.IsCustomErrorEnabled) {
var vr = new ViewResult();
vr.ViewName = "~/Views/Shared/MyError.cshtml";
vr.ViewBag.ControllerName = (string) filterContext.RouteData.Values["controller"];
vr.ViewBag.ActionName = (string) filterContext.RouteData.Values["action"];
vr.ViewBag.Exception = filterContext.Exception.ToString();
filterContext.Result = vr;
filterContext.ExceptionHandled = true;
}
}
- 上のようなOnException()メソッドを各コントローラークラスに記述する。
- もしくは、一括で処理する場合、各コントローラークラスが継承する基底コントローラークラスを作り、その基底クラスで上のメソッドを記述する。
** コントローラー外でのエラーを例外処理する場合はApplication_Errorを使う [#a967f90b]
global.asax.csにApplication_Error()を作成する。
** 参考 [#c7c6ee0e]
- http://prideparrot.com/blog/archive/2012/5/exception_handling_in_asp_net_mvc
- http://stackoverflow.com/questions/10354833/advantages-of-handleerror-over-application-error
- http://miso-soup3.hateblo.jp/entry/20120926/1348657714