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 未找到。下面我們訪問一個不存在的頁面,默認頁面顯示如下:

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

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

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();
            app.UseMvc();

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

    該中間件支持多種擴展方法。 一種方法采用 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 錯誤處理

 


免責聲明!

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



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