在一样平常开辟中,我们会去捕获许多的非常,来举行处置惩罚,一般我们的要领就是,在须要举行非常处置惩罚的处所加上 try catch 块,然则,假如须要非常处置惩罚的处所许多,那末,就会频仍的去写try catch 块,关于我们天生‘懒散' 的程序员来讲,总想找一个捷径。因而,就会有全局非常处置惩罚,那末,本日,我们就来看看在MVC中怎样举行全局非常处置惩罚的。
一、MVC框架本身的全局非常处置惩罚
在MVC中,框架已给我们一共了一套全局非常处置惩罚的特征类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框架已给我写好了的,我们能够直接拿来用。
在Error.cshtml页面中,我们能够做进一步处置惩罚,来显现毛病信息,依据需求来展现毛病信息。这些毛病信息都会在System.Web.Mvc.HandleErrorInfo类中的某些属性中找到的。
比方:一下是Error.cshtml。
我们在Control中,有意写一个非常出来:
public class HomeController : Controller { public ActionResult Index() { string i = "12a"; int j = Convert.ToInt32(i); return View(); } }
运转一下,我们来看一下效果。
以上就是运转的效果,我们能够看到,System.Web.Mvc.HandleErrorInfo类照样有许多雄厚的属性的,我们能够直接拿来用。
MVC自带的这套非常处置惩罚默许的是处置惩罚毛病码为500系列的非常,假如是404,就不会走这个了。不过,我们能够经由过程Web.config文件的设置,来举行处置惩罚。看我们怎样处置惩罚的。
起首,我们先将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(); } } }
页面:
然后我们在浏览器地点中写一个毛病的地点,看一下效果:
二、重写MVC中的非常处置惩罚
在开辟中,我们常常有这么一个需求,我们须要将非常经由过程文本日记的体式格局记录下来并保留,那末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;//毛病内容 //============================= //将毛病记录到日记中 //============================= } }
然后,将FilterConfig.cs到场:
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new CustomHandleErrorAttribute()); } }
如许,我们就能够完成我们的需求了。
以上就是有关MVC非常情况的相干处置惩罚的细致内容,更多请关注ki4网别的相干文章!