2017-05-18 57 views
2

我正在使用dotnet核心並創建了自定義異常過濾器來處理異常。我面臨的問題是,如果出現異常,自定義過濾器中的onException方法將被調用兩次。下面是代碼:DotnetCore:自定義過濾器中的OnException方法被調用兩次

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

控制器代碼是:

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

onException的爲什麼被稱爲兩次?

回答

2

使用Visual Studio我創建了一個新的Asp.Net核心Web應用程序,並使用標準的Web應用程序模板。然後,我添加了CustomExceptionFilter類,並增加了[CustomExceptionFilter]屬性爲HomeController,扔和裏面異常的Index方法:

[CustomExceptionFilter] 
public class HomeController : Controller 
{ 

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

Finaly,我設置一個斷點在此行中CustomExceptionFilter

base.OnException(context); 

並跑了網站。當然,調試器在throw上停止,然後停止在帶斷點的行上。斷點只被擊中一次。所以我的設置驗證了預期的行爲。

故障排除
在過去,我已經遇到了在那裏的東西,應該只被調用一次被調用了兩次類似的情況,它幾乎總是竟然是因爲第二個HTTP請求進來了,我是不是期待。所以它實際上只是每個http請求被調用一次。檢查的一種方法是查看以下所示的方法中的路徑和查詢:

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); 
    } 
}