16.ASP.NET Core應用程序中的開發者異常頁面中間件


Developer Exception Page Middleware in ASP.NET Core Application

       在這篇文章中,我將向大家介紹,怎么在ASP.NET Core應用程序中,使用異常頁面中間件,來處理我們程序中未處理的異常。在閱讀這篇文章之前,可以看看我這個系列的之前寫的文章。異常處理是所有應用程序中,特別關鍵的一個點,我們可以通過各種方式方法,來處理異常,但是在這篇文章我要向大家講解,怎樣使用異常頁面中間件來處理異常。這篇文章中,我們主要討論下面幾個點:

  1. 什么是開發者異常頁面中間件?

  2. 怎樣在ASP.NET Core應用程序中,使用異常頁面中間件?

  3. 怎樣定制異常中間件?

  4. 我們在哪配置異常頁面中間件?

理解異常頁面中間件

默認情況下,ASP.NET Core應用程序,如果發生了異常,就是僅僅簡單的返回一個狀態碼。我們通過一個例子,來了解一下。我們修改一下Configure方法,返回一個異常:

image

運行程序:就會看到這樣的頁面。

image

正如你上圖所看到的,返回了一個500狀態碼,表示:服務器內部異常。但是作為一個開發者,當你開發應用程序,你應該要在頁面上知道,異常的詳細信息,然后你才能分析,並采取措施解決Bug.


怎樣在ASP.NET Core應用程序中,使用DeveloperExceptionPage 中間件?

當程序發生異常的時候,如果你想在頁面中顯示異常的詳細信息的話,你需要使用Developer Exception Page中間件。所以我們來修改一下Configure方法。在我們的程序中,添加異常中間件。

image

然后運行應用程序,就看到為什么發生異常了。也能定位錯誤了!

image

        正如你在圖中所看到的,Developer Exception Page包含一些Tab,例如:Stack、Query、Cookies、Headers. Stack向你展示哪一行代碼發生的異常。Query向你展示Query Strings相關信息。Cookies向你展示請求設置的Cookies,Header向你展示客戶端發送的請求報文頭。

        如果你查看Query Tab就會發現,沒有Querystring相關信息,因為你沒有在URL中傳遞querystring的信息,或者你沒有在請求中設置Cooikes.我們在后面的文章中,將會詳細討論querystring 以及Cookies.

       請注意:請僅僅只在看來開發模式下面使用Developer Exception Page中間件。因為你不想在生產環境顯示這個開發的異常信息的。

怎樣在ASP.NET Core應用程序中定制UseDeveloperExceptionPage中間件?

如果你想,你也可以定制異常中間件。你需要記住的是:不管你什么時候,想要定制特定中間件,你需要使用下面這些東西:

  1. UseDeveloperExceptionPage==>為了能定制異常中間件,需要使用DeveloperExceptionPageOption對象;
  2. UseDefaultFiles==>使用DefaultFileOptions對象來定制中間件;
  3. UseStaticFiles==>使用StaticFileOptions對象來定制中間件;
  4. UseFileServer==>使用FileServerOptions對象來定制中間件;

我們將要定制UseDeveloperExceptionPage中間件,所以我們需要使用DeveloperExceptionPageOptions對象。看下圖:

image

運行程序:

image

DeveloperExceptionPageOptions類的SourceCodeLineCount屬性指定了導致異常的代碼行之前和之后要包含的代碼行數。

我們在哪需要配置異常中間件UseDeveloperExceptionPage?

我們應該盡可能早的,在請求管道中配置異常中間件,這樣我們就能發現,並顯示異常信息在頁面中了。

我們來修改一下Configure方法。將異常中間件放在Run方法之后再注冊。

image

然后我們再次運行程序:

image

就會發現,不會在頁面顯示詳細的異常信息了。這也就是為什么,我強調,我們應該盡可能早的配置異常中間件,以便處理程序中為處理的異常。

這篇文章,是我們ASP.NET Core基礎概念學習系列的最后一篇文章了,從后面的系列開始,我們就正式進入ASP.NET Core的相關學習了。希望大家喜歡。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM