原文:ASP.NET Core 異常和錯誤處理 - ASP.NET Core 基礎教程 - 簡單教程,簡單編程
ASP.NET Core 異常和錯誤處理
上一章節中,我們學習了 ASP.NET Core 中的 中間件, 知道中間件是一種裝配到應用程序管道以處理請求和響應的組件
本章節我們繼續來深入了解中間件,這次我們學習的將會是異常和錯誤處理中間件
當我們的 ASP.NET Core 應用程序出現錯誤時,我們有多種方式處理它們
上一章節中提到的 Microsoft.AspNetCore.Diagnostics
NuGet 包提供了相關的附加的中間件,這些中間件可以幫助我們處理異常和錯誤
app.UseDeveloperExceptionPage 中間件
為了模擬錯誤,我們回到 app.Run()
方法,看看如果我們每次命中這個中間件時拋出異常,應用程序的行為會是怎么樣的
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.Run(async (context) => { throw new System.Exception("Throw Exception"); var msg = Configuration["message"]; await context.Response.WriteAsync(msg); }); }
保存 Startup.cs
頁面並運行應用程序,顯示如下
我們可以看到一個錯誤頁面,顯示 HTTP 500 錯誤,一個內部服務器錯誤
提示在文件 Startup.cs
42 行的代碼中拋出了一個異常 Throw Exception
當然了,這是在調試模式下,如果我們注釋掉調試模式,也就是注釋掉下面的語句
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { /* if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } */ app.Run(async (context) => { throw new System.Exception("Throw Exception"); var msg = Configuration["message"]; await context.Response.WriteAsync(msg); }); }
保存 Startup.cs
頁面並運行應用程序,它只會拋出一個非常通用的消息,顯示如下
我們可以看到沒有加載這個資源。因為發生了一個 HTTP 500 錯誤,一個內部服務器錯誤,這不是很有幫助
但對於線上環境來說,它隱藏了錯誤的原因和位置,增加了應用程序的安全性
app.UseDeveloperExceptionPage
現在,我們回到中間件 app.UseDeveloperExceptionPage
這個中間件與其它中間件有些不同,其它中間件通常會檢查傳入的請求並對該請求做出一些響應
但 UseDeveloperExceptionPage
中間件不關心傳入的請求,因為它總是在管道后發生
它會調用下一個中間件,然后等待管道后面的任何事情是否會產生異常,如果有異常,這個中間件會給返回一個錯誤頁面,並顯示有關該異常的詳細信息
我們還可以從 UseDeveloperExceptionPage
中間件返回的結果中看到原始異常詳細信息
所有這些信息對開發人員都非常有用
當然,事實上,我們可能只想在開發人員運行應用程序時顯示這些信息,也就是開發環境上顯示異常的詳細信息,而在線上環境則顯示一個 500 服務器異常信息頁面
這會在稍后的章節中繼續學習,本章節我們將不做任何深入研究