グローバルアクションフィルタを使用して、すべての例外を処理してログに記録しています。ExceptionContext.ExceptionHandledがtrueに変更されます。例外はどこで処理されますか?
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ElmahHandleErrorAttribute());
filters.Add(new HandleErrorAttribute());
}
これは世界的なアクションフィルタElmahHandleErrorAttribute
が定義されている方法です - それはOnException
メソッドをオーバーライドします。
public class ElmahHandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
//Is the exception handled already? context.ExceptionHandled seems to be true here
if (!context.IsChildAction && (context.HttpContext.IsCustomErrorEnabled))
{
//Do other stuff stuff
//Log to Elmah
}
}
...
}
OnException
メソッドが実行時にcontext.ExceptionHandled
の値がtrueである理由を私は理解していません。 この例外はどのように処理されますか?
-EDIT- 私はWeb.Config
でcustomErrors
セクションを持っています。私はErrorController
クラスを持っていて、General
とHttp404
というアクションがあります。
<customErrors mode ="On" defaultRedirect="Error/General">
<error statusCode="404" redirect="Error/Http404"/>
</customErrors>
私は理解していないことは、コントローラのアクションGeneral
は(ブレークポイントがヒットされることはありません)が実行されていないが、ElmahHandleErrorAttribute
のOnException
方法が実行を開始したときにExceptionContext.ExceptionHandled
の値がtrueに設定されています。
あなたのコードで 'context.ExceptionHandled'が表示されません。どこですか? – gdoron
@gdoron context.ExceptionHandledのチェックを削除しました。'if(!context.IsChildAction &&!context.ExceptionHandled &&(context.HttpContext.IsCustomErrorEnabled))' – escist
コントローラの 'OnException'メソッドをオーバーライドしましたか? – gdoron