国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET MVC中異常處理&自定義錯誤頁詳析

2024-07-10 12:48:48
字體:
來源:轉載
供稿:網友

一、應用場景

對于B/S應用程序,在部署到正式環境運行的過程中,很有可能出現一些在前期測試過程中沒有發現的一些異?;蛘咤e誤,或者說只有在特定條件滿足時才會發生的一些異常,對于使用ASP.NET MVC開發的應用程序站點,在部署到IIS上后,如果開發人員未對程序進行錯誤處理,那么一旦程序出現未處理的錯誤或異常,用戶將看到一個讓人感到及其困惑的錯誤堆棧跟蹤頁面,使得站點的用戶體驗下降,從程序的角度上來說,不做自定義錯誤處理也不利于程序出問題時的根源查找,因為很多時候有些錯誤只在特定條件下滿足時才重現,一旦錯過,可能就需要花大量時間去測試來重現問題,如果此時開發人員有對程序中的運行時異常進行日志記錄,那么或許將提供一些有價值的錯誤根源信息,下面我將向下大家講解如何實現自定義異常處理并跳轉到友好的錯誤提示頁面。

二、異常處理&自定義錯誤頁

1、通過異常過濾器 實現異常處理和自定義錯誤頁

asp.net mvc 提供了 異常過濾器 的方式來實現當執行controller中某個action方法時拋出了未處理的異常時的捕捉,mvc中的異常過濾器是以特性(Attribute)的形式存在的,定義一個自定義異常過濾器只需要兩個步驟:

1、定義一個類,繼承FilterAttribute類,并實現IExceptionFilter接口 2、應用自定義異常過濾器至指定的 action方法 或 controller類 或 全局應用。

異常過濾器代碼

using log4net;using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace Blog20180413.Filters{ public class CustomExceptionFilterAttribute : FilterAttribute, IExceptionFilter { //log4net組件,用于日志記錄。 static readonly ILog log = LogManager.GetLogger(typeof(CustomExceptionFilterAttribute)); public void OnException(ExceptionContext filterContext) {  //對捕獲到的異常信息進行日志記錄,方便開發人員排查問題。  log.Error("應用程序異常", filterContext.Exception);  //跳轉到自定義的錯誤頁,增強用戶體驗。  ActionResult result = new ViewResult() { ViewName = "CustomErrorPage" };  filterContext.Result = result;  //異常處理結束后,一定要將ExceptionHandled設置為true,否則仍然會繼續拋出錯誤。  filterContext.ExceptionHandled = true; } }}

使用異常過濾器

using Blog20180413.Filters;using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace Blog20180413.Controllers{ public class TestExceptionHandleController : Controller { [CustomExceptionFilter] public ActionResult Index() {  string str = string.Empty;  //將拋出轉換異常  int result = int.Parse(str);  return View(); } }}

注意:

第二個步驟中提到,可以將自定義異常過濾器 只應用到 action或者controller,如果只想將指定的異常過濾器以特性的形式應用到指定的一個或者多個controller或者action,而不想應用到所有的controller或者action,那么必須將該異常過濾器繼承FilterAttribute類,這是因為mvc框架是通過FilterAttributeFilterProvider.GetFilters來獲取標記在指定controller或者action上的異常過濾器特性的,而GetFilters內部邏輯要求必須繼承自FilterAttribute類。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昭通市| 清河县| 宕昌县| 五原县| 江西省| 沿河| 娄底市| 迁安市| 阳新县| 禹州市| 边坝县| 阳曲县| 永年县| 玛多县| 拉孜县| 洛浦县| 澄江县| 金山区| 柳河县| 阜康市| 内黄县| 连平县| 东乡县| 永州市| 武山县| 德阳市| 犍为县| 玉龙| 兖州市| 桑日县| 青海省| 重庆市| 甘洛县| 辰溪县| 巴林右旗| 中方县| 临汾市| 鹿邑县| 广德县| 镇江市| 临安市|