asp.net core 系列 14 錯誤處理

来源:https://www.cnblogs.com/MrHSR/archive/2019/01/23/10302558.html
-Advertisement-
Play Games

一.概述 本文介紹處理 ASP.NET Core 應用中常見錯誤的一些方法。主要是關於:開發環境異常頁;非開發環境配置自定義異常處理頁;配置狀態代碼頁(沒有正文響應,http狀態400~599的)。 1.1 開發環境異常頁 要將應用配置為顯示有關異常的詳細信息的頁面,請使用開發環境異常頁。要環境設置 ...


一.概述

  本文介紹處理 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 錯誤處理

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在併發編程中,對於共用資源的使用需要確保絕對的安全性。除了利用鎖機制之外,還有一種無鎖的概念。所謂無鎖,就是假定在併發情況下,對於共用資源的訪問沒有衝突,線程可以一直不停的運行,無需阻塞,如果產生衝突,則使用CAS演算法確保全全性。Java在很多併發代碼中都使用了這種演算法。 CAS演算法的核心參數如下: ...
  • 要使用python中的串口,可以下載pywin32-224-cp36-cp36m-win_amd64.whl去安裝或者pip install去安裝。 調試下來,有一點很不爽,讀取read()數據的timeout時間最小單位是秒,這對應很頻繁的讀取使用,很浪費時間。如果不設置這個時間我在有些串口設備上 ...
  • spring boot 2.0 整合 elasticsearch NoNodeAvailableException ...
  • 【問題描述】 已知三個素數的和為 n ,正整數 n 由鍵盤輸入,計算並輸出這三個素數乘積的最大值。 【代碼展示】 # include<iostream>using namespace std;int sushu(int x){ for(int i=2;i<=x/2;i++){ // 如果是合數,返回 ...
  • SG函數先不說,給自己總結下三大博弈。和二進位及黃金分割聯繫密切,數學真奇妙,如果不用考試就更好了。 1.Bash Game:n個物品,最少取1個,最多取m個,先取完者勝。 給對手留下(m+1)的倍數肯定獲勝。若n%(m+1)==0,先手必敗。 51nod裸題:1066 2.Nim Game:n堆物 ...
  • CImage類中GetPixelAddress()函數來設置獲取對應的顏色值是發現Alpha無效。 不管 newBuffer[3] = a; 如何設置 newImage始終無法透明。 這裡要註意的是 newImage.Create(width,height,32); 這裡第三個函數一定要設置為32 ...
  • 函數遞歸 函數遞歸:函數的遞歸調用,即在函數調用的過程中,又直接或間接地調用了函數本身 直接調用 間接調用 ...
  • 1 # -*- conding=utf-8 -*- 2 3 import requests 4 from bs4 import BeautifulSoup 5 import io 6 7 url = "https://www.mzitu.com/164871" 8 #Referer = ? 是模擬電 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...