欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MVC異常處理詳解

 更新時(shí)間:2017年06月07日 11:47:04   作者:萌萌丶小魔王  
這篇文章主要為大家詳細(xì)介紹了MVC異常處理的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

       在日常開發(fā)中,我們會(huì)去捕捉很多的異常,來進(jìn)行處理,通常我們的方法就是,在需要進(jìn)行異常處理的地方加上 try catch 塊,但是,如果需要異常處理的地方很多,那么,就會(huì)頻繁的去寫try catch 塊,對(duì)于我們天生‘懶惰' 的程序員來說,總想找一個(gè)捷徑。于是,就會(huì)有全局異常處理,那么,今天,我們就來看看在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)绾翁幚淼摹?/span>

首先,我們先將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());
    }
  }

這樣,我們就可以完成我們的需求了。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論