UseDeveloperExceptionPage 中間件 我們談談在 Startup 類的 Configure()方法中以下代碼: 如果我們使用上面的代碼運行我們的應用程式,我們看不到異常,而是看到“來自 Default.html 頁面中的 Hello”。如果您瞭解 asp.net Core 請求 ...
UseDeveloperExceptionPage 中間件
我們談談在 Startup 類的 Configure()方法中以下代碼:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseFileServer();
app.Run(async (context) =>
{
throw new Exception("您的請求在管道中發生了一些異常,請檢查。");
await context.Response.WriteAsync("Hello World!");
});
}
如果我們使用上面的代碼運行我們的應用程式,我們看不到異常,而是看到“來自 Default.html 頁面中的 Hello”。如果您瞭解 asp.net Core 請求處理管道的工作原理,那麼您可能已經知道我們沒有看到我們拋出的異常的原因。
UseFileServer
中間件結合了UseDefaultFiles
和UseStaticFiles
中間件的功能。在我們之前的系列視頻中,我們在 wwwroot 文件夾中包含了一個名為default.html
的預設 html 文檔。
因此,對應用程式根 URL 的請求即http://localhost:49119
由UseFileServer
處理中間件和管道從那裡反轉。因此,在我們Run()
方法註冊的請求管道中的下一個中間件也無法執行,因此我們不會看到此中間件拋出的異常。
現在,如果我們向http://localhost:49119/abc.html
發出請求,我們會看到異常。因為,在這種情況下,UseFileServer
中間件找不到名為abc.html
的文件。 它會繼續去調用管道中的下一個中間件,在我們的例子中是我們使用Run()
方法註冊的中間件。此中間件拋出異常,我們按預期看到異常詳細信息。
如果您對傳統的 asp.net 有任何經驗,那麼您必須非常熟悉此頁面。這類似於傳統的 asp.net 中的黃色死亡屏幕。
此Developer Exception
頁麵包含異常詳細信息 :
- 堆棧跟蹤,包括導致異常的文件名和行號
- Query String, Cookies 和 HTTP headers
目前,在異常頁面的“Query ”選項卡上,我們看到“無 QueryString 數據”。如果請求 URL 中有任何查詢字元串參數,如下所示,您將在“Query ”選項卡下看到它們。
http://localhost:48118/abc.html?country=person&state=islocked
自定義 UseDeveloperExceptionPage 中間件
與 ASP.NET Core 中的大多數其他中間件組件一樣,我們也可以自定義UseDeveloperExceptionPage
中間件。每當您想要自定義中間件組件時,請始終記住您可能擁有相應的OPTIONS對象
。那麼,要自定義UseDeveloperExceptionPage
中間件,
DeveloperExceptionPageOptions developerExceptionPageOptions = new DeveloperExceptionPageOptions
{
SourceCodeLineCount = 10
};
app.UseDeveloperExceptionPage(developerExceptionPageOptions);
SourceCodeLineCount
屬性指定在導致異常的代碼行之前和之後要包含的代碼行數。
UseDeveloperExceptionPage 中間件如何工作
UseDeveloperExceptionPage
中間件的位置儘可能的放置在其他中間件的位置前面,因為如果管道中的後面的中間件組件引發異常,它可以處理異常並顯示Developer Exception
頁面。請參考以下代碼:使用 Run()註冊的中間件後出現UseDeveloperExceptionPage()
中間件方法。因此,在這種情況下,將不會顯示開發人員異常頁面。這就是它必須儘早的放置在請求處理管道的原因。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//app.UseFileServer();
app.Run(async (context) =>
{
throw new Exception("Some error processing the request");
await context.Response.WriteAsync("Hello World!");
});
if (env.IsDevelopment())
{
DeveloperExceptionPageOptions developerExceptionPageOptions = new DeveloperExceptionPageOptions
{
SourceCodeLineCount = 10
};
app.UseDeveloperExceptionPage(developerExceptionPageOptions);
}
}
歡迎添加個人微信號:Like若所思。
歡迎關註我的公眾號,不僅為你推薦最新的博文,還有更多驚喜和資源在等著你!一起學習共同進步!