2017-05-18 20 views
2

私はdotnet coreを使用しており、例外を処理するカスタム例外フィルタを作成しました。私が直面している問題は、例外の場合、カスタムフィルタのonExceptionメソッドが2回呼び出されることです。以下のコードです:DotnetCore:カスタムフィルタのOnExceptionメソッドが2回呼び出されました

public class CustomExceptionFilter : ExceptionFilterAttribute 
    { 
      public override void OnException(ExceptionContext context) 
       { 
        // Code 
        base.OnException(context); 
       } 
    } 

コントローラコードがある:なぜonExceptionをを2回

  [CustomExceptionFilter] 
     public class MyController : Controller 
     { 
      // Raise an exception in any apis 
     } 

呼ばれているのですか?

答えて

2

Visual Studioを使用して、新しいAsp.NetコアWebアプリケーションを作成し、標準のWebアプリケーションテンプレートを使用しました。その後、私はCustomExceptionFilterクラスを追加し、HomeController[CustomExceptionFilter]属性を追加し、投げ、その内部の例外がIndex方法です:

base.OnException(context); 

[CustomExceptionFilter] 
public class HomeController : Controller 
{ 

    public IActionResult Index() 
    { 
     throw new Exception("Time to bail!"); 
     return View(); 
    } 
} 

Finaly、私はCustomExceptionFilterにこの行にブレークポイントを設定しましたそしてウェブサイトを走らせた。デバッガはもちろん、throwで停止し、ブレークポイントのある行で停止します。ブレークポイントは1回だけヒットします。そこで、私のセットアップは予想される動作を確認します。

トラブルシューティング
過去には、私は一度だけ呼び出されるべき何かが2回呼び出され似たような状況に走っていると、2番目のHTTPリクエストは、私がなかったことで来たので、ほとんど常にあることが判明しています期待している。だから、実際には、http要求ごとに一度だけ呼び出されていました。これを確認する1つの方法は、以下のようにできる方法でパスとクエリを調べることです:

public class CustomExceptionFilter : ExceptionFilterAttribute { 
    public override void OnException(ExceptionContext context) { 

     //set breakpoing on the following line to see what the requested path and query is 
     string pathAndQuery = context.HttpContext.Request.Path + context.HttpContext.Request.QueryString; 

     // Code 
     base.OnException(context); 
    } 
} 
関連する問題