MVC異常處理詳解
在日常開發(fā)中,我們會去捕捉很多的異常,來進行處理,通常我們的方法就是,在需要進行異常處理的地方加上 try catch 塊,但是,如果需要異常處理的地方很多,那么,就會頻繁的去寫try catch 塊,對于我們天生‘懶惰' 的程序員來說,總想找一個捷徑。于是,就會有全局異常處理,那么,今天,我們就來看看在MVC中怎么進行全局異常處理的。
一、MVC框架自己的全局異常處理
在MVC中,框架已經(jīng)給我們一共了一套全局異常處理的特性類HandleErrorAttribute類。我們可以在MVC中的App_Start文件夾中的FilterConfig.cs文件中找到這么一行代碼
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); }
這個就是實例化一個HandleErrorAttribute類,放到過濾器中。然后我們的Views>Shared文件夾中有一個Error.cshtml的頁面,其中,該頁面里的Model的類型為System.Web.Mvc.HandleErrorInfo,這個是MVC框架已經(jīng)給我寫好了的,我們可以直接拿來用。
在Error.cshtml頁面中,我們可以做進一步處理,來顯示錯誤信息,根據(jù)需求來展示錯誤信息。這些錯誤信息都會在System.Web.Mvc.HandleErrorInfo類中的某些屬性中找到的。
例如:一下是Error.cshtml。
我們在Control中,故意寫一個異常出來:
public class HomeController : Controller { public ActionResult Index() { string i = "12a"; int j = Convert.ToInt32(i); return View(); } }
運行一下,我們來看一下結(jié)果。
以上就是運行的結(jié)果,我們可以看到,System.Web.Mvc.HandleErrorInfo類還是有很多豐富的屬性的,我們可以直接拿來用。
MVC自帶的這套異常處理默認的是處理錯誤碼為500系列的異常,如果是404,就不會走這個了。不過,我們可以通過Web.config文件的設(shè)置,來進行處理??次覀?nèi)绾翁幚淼摹?/span>
首先,我們先將Error.cshtml頁補充完整,先給他加一個Control,然后,我們再寫一個專門處理404的View和Control。如下
namespace Exception.Controllers { public class SharedController : Controller { // GET: Shares public ActionResult Error() { return View(); } public ActionResult NotFondError() { return View(); } } }
頁面:
然后我們在瀏覽器地址中寫一個錯誤的地址,看一下結(jié)果:
二、重寫MVC中的異常處理
在開發(fā)中,我們經(jīng)常有這么一個需求,我們需要將異常通過文本日志的方式記錄下來并保存,那么MVC自帶的異常處理方式System.Web.Mvc.HandleErrorInfo沒有這么一個功能,那么我們通過重寫的方式來讓它有這個功能。下面,我們來看看如何重寫。
首先我們建一個類,讓這個類繼承System.Web.Mvc.HandleErrorInfo,然后重寫System.Web.Mvc.HandleErrorInfo中的虛方法:OnException方法。
public class CustomHandleErrorAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { base.OnException(filterContext); var err = filterContext.Exception.Message;//錯誤內(nèi)容 //============================= //將錯誤記錄到日志中 //============================= } }
然后,將FilterConfig.cs加入:
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new CustomHandleErrorAttribute()); } }
這樣,我們就可以完成我們的需求了。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- asp.net?core?MVC?全局過濾器之ExceptionFilter過濾器(1)
- Asp.net Mvc 身份驗證、異常處理、權(quán)限驗證(攔截器)實現(xiàn)代碼
- 詳解使用Spring MVC統(tǒng)一異常處理實戰(zhàn)
- springboot springmvc拋出全局異常的解決方法
- ASP.NET MVC異常處理模塊詳解
- ASP.NET MVC下基于異常處理的完整解決方案總結(jié)
- ASP.NET mvc異常處理的方法示例介紹
- 基于SpringMVC的全局異常處理器介紹
- ASP.NET MVC中異常處理&自定義錯誤頁詳析
- ASP.NET MVC中異常Exception攔截的深入理解
相關(guān)文章
利用sender的Parent獲取GridView中的當前行(獲取gridview的值)
這篇文章主要介紹了利用sender的Parent獲取GridView中的當前行的方法,大家參考使用吧2014-01-01ASP.Net WebAPI與Ajax進行跨域數(shù)據(jù)交互時Cookies數(shù)據(jù)的傳遞
本文主要介紹了ASP.Net WebAPI與Ajax進行跨域數(shù)據(jù)交互時Cookies數(shù)據(jù)傳遞的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧2017-05-05.NET Core 基于Websocket的在線聊天室實現(xiàn)
這篇文章主要介紹了.NET Core 基于Websocket的在線聊天室實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03