在新建一個ASP.NET Core項目後,在項目Startup類的Configure方法中默認會添加兩個方法的調用,app.UseDeveloperExceptionPage和app.UseExceptionHandler,以下所示:html
// 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狀態碼爲500app
可是咱們能夠看到app.UseDeveloperExceptionPage方法,是寫在if (env.IsDevelopment())這個條件裏面的,因此當只有在開發環境下,ASP.NET Core纔會顯示上面的異常錯誤信息頁,而在其它環境下(例如ASP.NET Core項目發佈後所處的生產環境),會執行app.UseExceptionHandler方法,該方法會傳遞一個URL地址,本例中咱們傳遞的就是"/Home/Error":ui
app.UseExceptionHandler("/Home/Error");
也就是說在非開發環境下,ASP.NET Core項目中有代碼發生異常後,ASP.NET Core會將"/Home/Error"這個URL地址的頁面內容呈現到客戶端瀏覽器上,而"/Home/Error"是一個自定義的MVC視圖頁面,你能夠定義任何想顯示的內容,在這裏咱們只顯示一個錯誤提示"後臺代碼發生錯誤!",如下是視圖文件"Error.cshtml"的內容:this
@{ 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了:spa
固然這裏,咱們也能夠在HomeController的Error方法中,經過Response.StatusCode屬性將其改成其它狀態碼。3d
最終呈如今客戶端瀏覽器上的頁面,就是咱們在前面定義的視圖文件"Error.cshtml":code
因此app.UseDeveloperExceptionPage和app.UseExceptionHandler兩個方法,都是用來定義ASP.NET Core項目有代碼發生異常後,給客戶端瀏覽器顯示什麼頁面的,只不過app.UseDeveloperExceptionPage方法用於開發環境,ASP.NET Core會自動生成一個異常顯示頁面,而app.UseExceptionHandler方法用於非開發環境,而且須要咱們本身定義異常顯示頁面。htm