ASP.NET Core中app.UseDeveloperExceptionPage和app.UseExceptionHandler方法有什么用


在新建一個ASP.NET Core項目后,在項目Startup類的Configure方法中默認會添加兩個方法的調用,app.UseDeveloperExceptionPage和app.UseExceptionHandler,如下所示:

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();     }
    else
    {
        app.UseExceptionHandler("/Home/Error");     }
            
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}

其實app.UseDeveloperExceptionPage方法就是在告訴ASP.NET Core,當代碼發生異常錯誤后,在瀏覽器上顯示異常錯誤信息頁,也就是我們在開發代碼時,經常看到的異常錯誤信息頁:

 

該異常錯誤信息頁返回的HTTP狀態碼為500

但是我們可以看到app.UseDeveloperExceptionPage方法,是寫在if (env.IsDevelopment())這個條件里面的,所以當只有在開發環境下,ASP.NET Core才會顯示上面的異常錯誤信息頁,而在其它環境下(例如ASP.NET Core項目發布后所處的生產環境),會執行app.UseExceptionHandler方法,該方法會傳遞一個URL地址,本例中我們傳遞的就是"/Home/Error":

app.UseExceptionHandler("/Home/Error");

也就是說在非開發環境下,ASP.NET Core項目中有代碼發生異常后,ASP.NET Core會將"/Home/Error"這個URL地址的頁面內容呈現到客戶端瀏覽器上,而"/Home/Error"是一個自定義的MVC視圖頁面,你可以定義任何想顯示的內容,在這里我們只顯示一個錯誤提示"后台代碼發生錯誤!",以下是視圖文件"Error.cshtml"的內容:

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Error</title>
</head>
<body>
    <h1>后台代碼發生錯誤!</h1>
</body>
</html>

注意當使用app.UseExceptionHandler方法,將用戶HTTP請求轉向"/Home/Error"這個URL地址后,在HomeController的Error方法中,HTTP請求的默認狀態就已經變為500了:

當然這里,我們也可以在HomeController的Error方法中,通過Response.StatusCode屬性將其改為其它狀態碼。

最終呈現在客戶端瀏覽器上的頁面,就是我們在前面定義的視圖文件"Error.cshtml":

 

所以app.UseDeveloperExceptionPage和app.UseExceptionHandler兩個方法,都是用來定義ASP.NET Core項目有代碼發生異常后,給客戶端瀏覽器顯示什么頁面的,只不過app.UseDeveloperExceptionPage方法用於開發環境,ASP.NET Core會自動生成一個異常顯示頁面,而app.UseExceptionHandler方法用於非開發環境,並且需要我們自己定義異常顯示頁面。

 


免責聲明!

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



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