ASP.NET Core應用錯誤處理
最近在學習蔣金楠的ASP.NET Core 系列 真的是長知識了,博主地址:https://www.cnblogs.com/artech
一、顯示開發者異常頁面
由於ASP.NET Core應用是面向多個客戶端請求,如果一個錯誤,它並不會影響整個應用的終止,出於安全的考慮,客戶端在預設情況下應該得不到報錯資訊,這無疑對我們開發者有著不好的體驗,對於生產環境,我們非常希望有針對性的錯誤體驗,ASP.NET Core提供了d相應的中介軟體幫助我們定製錯誤資訊,這些中介軟體都在“Microsoft.AspNetCore.Diagnostics”這個NuGet包中。
由於應用並沒有中斷,瀏覽器上也並沒有顯示任何具有針對性的錯誤資訊,開發人員在進行查錯糾錯的時候如何準確定位到作為錯誤根源的那一行程式碼呢?具體來說,我們又有兩種解決方案,一種就是利用Log,因為ASP.NET Core在進行請求處理時出現的任何錯誤都會被寫入日誌,所以我們可以通過註冊相應的LoggerProvider(比如註冊一個ConsoleLoggerProvider將日誌直接寫入宿主應用的控制檯)到來獲取寫入的錯誤日誌。
至於另一種解決方案,就是直接顯示一個包含錯誤相應資訊的錯誤頁面,由於這個頁面是在開發環境給開發者看的,所以我們將這個頁面稱為“開發者異常頁面(Developer Exception Page)”。針對頁面的自動呈現是利用一個名為DeveloperExceptionPageMiddleware的中介軟體來完成的,我們可以呼叫ApplicationBuilder的擴充套件方法UseDeveloperExceptionPage來註冊這個中介軟體。
public static void Main(string[] args) { new WebHostBuilder() .UseKestrel() .Configure(app => app.UseDatabaseErrorPage(). Run(context => Task.FromException(new InvalidOperationException("APPLICATION ERROR")))) .Build() .Run(); CreateWebHostBuilder(args).Build().Run(); }
開發者可以不僅可以看到通過DeveloperExceptionPageMiddleware中介軟體呈現的錯誤,詳細的內容往往會帶來一些敏感資訊,所以務必記住只有在開發環境才能註冊這個中介軟體,如下所示的程式碼片段體現了針對DeveloperExceptionPageMiddleware中介軟體正確的註冊方式。
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } }