2017-05-22 4 views
7

は、私は次のようなカスタム例外FilterAttributeを持っている:MVC ExceptionFilterはいつ実行されるのですか?アプリケーションレベルのエラーハンドラはいつですか?

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] 
public sealed class ExceptionLoggingFilterAttribute : FilterAttribute, IExceptionFilter 
{ 
    public void OnException(ExceptionContext filterContext) 
    { 
     if (filterContext == null) 
     { 
      throw new ArgumentNullException(nameof(filterContext)); 
     } 

     if (filterContext.ExceptionHandled) 
     { 
      return; 
     } 

     // some exception logging code (not shown) 

     filterContext.ExceptionHandled = true; 
} 

私は、この私も自分のglobal.asaxで宣言されたのApplication_Errorメソッドを持っている私のFilterConfig.cs

public static class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters?.Add(new ExceptionLoggingFilterAttribute()); 
    } 
} 

でグローバルに登録されています。 CS

例外フィルタコードがヒットし、WILされます
protected void Application_Error(object sender, EventArgs e) 
    { 
     var exception = Server.GetLastError(); 

     // some exception logging code (not shown) 
    } 
  1. それはApplication_Errorメソッドのグローバルエラーハンドラにまっすぐに行きますか? (私はExceptionHandledのコンセプトを理解し、フィルタで処理されたときにグローバルエラーハンドラにカスケードされないことをマークすることで実現します)。
  2. 私がフィルタにヒットしたと考えられる例外 - 404のHttpExceptionはフィルタにヒットせず、アプリケーションエラーハンドラで捕捉されます。

  3. 私は、人々が特定のエラービューに対してServer.TransferRequestを実行するためにglobal.asax.csのHttpContext.Currentを使用するコードサンプルをいくつか見てきました。これはベストプラクティスですか? web.configのsystem.webセクションのCustomErrorsセクションを使用する方が良いでしょうか?

答えて

0

例外フィルタは、ASP.NET MVCパイプラインの実行中に発生するエラーに対してのみヒットされます。アクションメソッドの実行中:

例外フィルタ。これらは、 がASP.NET MVCパイプライン の実行中にスローされた未処理の例外がある場合、IExceptionFilterとexecuteを実装します。例外フィルタは、 ログやエラーページの表示などのタスクに使用できます。 HandleErrorAttributeクラスは、例外フィルタの一例である です。

(から:https://msdn.microsoft.com/en-us/library/gg416513(VS.98).aspx)404エラーの場合

誤差をフィルタで処理されないように、対処方法は、決定できませんでした。

その他すべてのエラーはApplication_Errorメソッドで処理されます。 http://benfoster.io/blog/aspnet-mvc-custom-error-pages

は、あなたの質問の後半部分については、私は信頼性の高い方法でカスタムエラーページを設定する方法の良い概要が含まれている以下のブログ記事をお勧めします

関連する問題