使用 BaseController 的 ASP.NET Core 中的錯誤管理
在以前的 ASP.NET 版本中,我習慣於創建一個繼承自其他控制器的 BaseController 並在那裡攔截一般錯誤並使用簡單的日誌記錄方法記錄每個錯誤並傳遞ExceptionContext filterContext。
我應該在 ASP.NET 5 中做同樣的事情嗎?
我在文件Startup.cs中看到有一個if / else語句基本上將調試/實時條件分開,與行
app.UseErrorHandler("/Home/Error");用於生產應用程序。
我應該如何掛鉤並記錄錯誤?
在 ASP.NET 5 中處理和記錄錯誤涉及一些元素。
要在生產場景中處理錯誤並顯示錯誤頁面,
app.UseExceptionHandler()方法是要走的路。ASP.NET GitHub 組織上的診斷儲存庫包含一個顯示此內容的範例。對於您想要查看完整堆棧跟踪和其他診斷資訊的開發時方案,請使用app.UseDeveloperExceptionPage()如本範例中所示。如果應用程序使用的是 ASP.NET MVC 6,則有一種 MVC 特定的錯誤處理方式,就像早期版本的 ASP.NET MVC 一樣。在 ASP.NET MVC 6 中,過濾器(或控制器本身,它也是一個過濾器)可以處理/覆蓋該
OnActionExecuted方法並檢查ActionExecutedContext參數以嘗試處理錯誤。在日誌方面,ASP.NET 5 中有一個新的日誌基礎結構,它可以向任何已註冊的
ILogger. Visual Studio 2015 中的預設項目模板註冊了一些將錯誤(和其他數據)記錄到控制台和 Visual Studio 調試輸出視窗的記錄器。但是,在 IIS 或 IIS Express 中執行時,沒有控制台視窗(還沒有!)。但是,如果您從命令行執行(使用dnx web),那麼您會看到錯誤。或者,當然,您可以註冊一個不同的記錄器來寫入日誌文件或數據庫並查看那裡的日誌。
ILogger要在 Web 應用程序中註冊自定義:
- 編寫實現
ILogger介面的記錄器。請參閱DNX 實現以了解如何執行此操作。- 將類型參數添加
ILoggerFactory到應用程序Startup類的Configure方法中。- 在
Configure方法呼叫loggerFactory.AddProvider(<some provider>)中並傳入記錄器的一個實例。