要在達林季米特洛夫回答
比如像自定義模型粘合劑,驗證,操作篩選器,...也 可以允許攔截一些特殊的條件,以避免 用的try/catch污染你的控制器協作無處不在。
這是我更喜歡的。你可以做一個IExceptionFilter這將是這樣的:
public class ExceptionLoggingFilter : IExceptionFilter
{
private ILogger _logger;
public ExceptionLoggingFilter(ILogger logger)
{
_logger = logger;
}
public void OnException(ExceptionContext context)
{
Exception ex = context.Exception;
if (_logger != null)
{
_logger.log(ex)
}
}
context.ExceptionHandled = true; //see note
}
注意:如果你不想重新拋出你可以添加例外。如果您只想記錄日誌,但有另一個過濾器來處理它,則可以刪除該行。
然後在Global.aspx你會怎麼做:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ExceptionLoggingFilter(new Log4NetLogger()));
}
我喜歡創建過濾器來創建一個Application_Error
,因爲對我來說更容易不同的功能分開。 (如日誌記錄,檢查應用程序是否可以處理它等)