asp.net core 系列 14 錯誤處理

asp.net core 系列 14 錯誤處理

一.概述

本文介紹處理 ASP.NET Core 應用中常見錯誤的一些方法。主要是關於:開發環境異常頁;非開發環境配置自定義異常處理頁;配置狀態代碼頁(沒有正文響應,http狀態400~599的)。

1.1 開發環境異常頁

要將應用配置為顯示有關異常的詳細信息的頁面,請使用開發環境異常頁。要環境設置為 Development,具體查看:asp.net core系列9環境。下面向 Startup.Configure 方法添加代碼行:

    if (env.IsDevelopment())
  {
   //注意: 調用該方法,要放在對其捕獲異常的任何中間件前面,中間件格式Use{ xxx }(),如UseMvc();
   app.UseDeveloperExceptionPage();
   }

 1.2 配置自定義異常處理頁

 配置自定義異常處理頁,用於非 Development 環境下,下面是razor項目中的異常處理頁代碼(Pages下Error.cshtml頁面)。

   if (env.IsDevelopment())
  {

   app.UseDeveloperExceptionPage();
  }
   else
  {
  app.UseExceptionHandler("/error");
   }

在 MVC 應用中,不要使用 HTTP 方法特性(如 HttpGet)修飾錯誤處理程序操作方法。 顯式謂詞可阻止某些請求訪問方法。 允許匿名訪問方法,以便未經身份驗證的用戶能夠接收錯誤視圖。

 //mvc中,HomeController中的Error, 添加[AllowAnonymous]
[AllowAnonymous]
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}

1.3配置狀態代碼頁

默認情況下,應用不會為 HTTP 狀態代碼提供豐富狀態代碼頁,例如 404 未找到。下面我們訪問一個不存在的頁面,默認頁面顯示如下:

asp.net core 系列 14 錯誤處理

下面提供狀態代碼頁,使用狀態代碼頁中間件,向 Startup.Configure 方法中添加。注意: 管道中請求處理中間件之前調用 UseStatusCodePages。

 //請求處理中間件之前調用 
app.UseStatusCodePages();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc();

默認情況下,狀態代碼頁中間件為常見狀態代碼(如 404)添加純文本處理程序, 如下所示:

asp.net core 系列 14 錯誤處理

該中間件支持多種擴展方法。 一種方法採用 Lambda 表達式:

    //自定義頁面的輸出類型和文字信息及狀態碼,用於處理程序,檢查狀態代碼在400~599之間且沒有正文的響應
    app.UseStatusCodePages(async context =>
    {
     context.HttpContext.Response.ContentType = "text/plain";
     await context.HttpContext.Response.WriteAsync(
    "Status code page, status code: " +
     context.HttpContext.Response.StatusCode);
    });

UseStatusCodePages 重載需要使用內容類型和格式字符串:

   app.UseStatusCodePages("text/plain", "Status code page, status code: {0}");

1.4 UseStatusCodePagesWithRedirects重定向

該中間件作用是: (1) 向客戶端發送“302 和狀態碼。(2)將客戶端重定向到 URL 模板中的位置。

 //當沒有正文的響應時,重定向到指定頁面,{0}點位符表示請求出錯的http的狀態碼
app.UseStatusCodePagesWithRedirects("/error/{0}");
//請求處理中間件之前調用
// app.UseStatusCodePages();

下面是在razor項目中,當訪問一個不存在的頁面時http://localhost:60397/page/missingpage,地址重定向到error頁並顯示出錯的狀態碼,必要時還可以在error頁的OnGet()方法中進行業務處理。

asp.net core 系列 14 錯誤處理

asp.net core 系列 14 錯誤處理

參考文獻

官方資料:asp.net core 錯誤處理

歡迎添加個人微信號:Like若所思。

歡迎關注我的公眾號,不僅為你推薦最新的博文,還有更多驚喜和資源在等著你!一起學習共同進步!

asp.net core 系列 14 錯誤處理


分享到:


相關文章: