您好,登錄后才能下訂單哦!
小編給大家分享一下MVC中如何進(jìn)行全局異常處理,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
一、MVC框架自己的全局異常處理
在MVC中,框架已經(jīng)給我們一共了一套全局異常處理的特性類HandleErrorAttribute類。我們可以在MVC中的App_Start文件夾中的FilterConfig.cs文件中找到這么一行代碼
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); }
這個(gè)就是實(shí)例化一個(gè)HandleErrorAttribute類,放到過濾器中。然后我們的Views>Shared文件夾中有一個(gè)Error.cshtml的頁面,其中,該頁面里的Model的類型為System.Web.Mvc.HandleErrorInfo,這個(gè)是MVC框架已經(jīng)給我寫好了的,我們可以直接拿來用。
在Error.cshtml頁面中,我們可以做進(jìn)一步處理,來顯示錯(cuò)誤信息,根據(jù)需求來展示錯(cuò)誤信息。這些錯(cuò)誤信息都會(huì)在System.Web.Mvc.HandleErrorInfo類中的某些屬性中找到的。
例如:一下是Error.cshtml。
我們在Control中,故意寫一個(gè)異常出來:
public class HomeController : Controller { public ActionResult Index() { string i = "12a"; int j = Convert.ToInt32(i); return View(); } }
運(yùn)行一下,我們來看一下結(jié)果。
以上就是運(yùn)行的結(jié)果,我們可以看到,System.Web.Mvc.HandleErrorInfo類還是有很多豐富的屬性的,我們可以直接拿來用。
MVC自帶的這套異常處理默認(rèn)的是處理錯(cuò)誤碼為500系列的異常,如果是404,就不會(huì)走這個(gè)了。不過,我們可以通過Web.config文件的設(shè)置,來進(jìn)行處理??次覀?nèi)绾翁幚淼摹?/p>
首先,我們先將Error.cshtml頁補(bǔ)充完整,先給他加一個(gè)Control,然后,我們再寫一個(gè)專門處理404的View和Control。如下
namespace Exception.Controllers { public class SharedController : Controller { // GET: Shares public ActionResult Error() { return View(); } public ActionResult NotFondError() { return View(); } } }
頁面:
然后我們在瀏覽器地址中寫一個(gè)錯(cuò)誤的地址,看一下結(jié)果:
二、重寫MVC中的異常處理
在開發(fā)中,我們經(jīng)常有這么一個(gè)需求,我們需要將異常通過文本日志的方式記錄下來并保存,那么MVC自帶的異常處理方式System.Web.Mvc.HandleErrorInfo沒有這么一個(gè)功能,那么我們通過重寫的方式來讓它有這個(gè)功能。下面,我們來看看如何重寫。
首先我們建一個(gè)類,讓這個(gè)類繼承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;//錯(cuò)誤內(nèi)容 //============================= //將錯(cuò)誤記錄到日志中 //============================= } }
然后,將FilterConfig.cs加入:
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new CustomHandleErrorAttribute()); } }
這樣,我們就可以完成我們的需求了。
以上是“MVC中如何進(jìn)行全局異常處理”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。